А>Какая разница между

A *ptr = new B();

А>и
A *ptr = new B;

В первом случае: выполняется value-initialization. Во втором случае: для не-POD класс типов выполняется default-initialization, а для остальных типов вообще никакой инициализации не делается.

Будет ли между этими варантами разница зависит от специфических свойств конкретного типа 'B'.

Если этот тип вообще не является класс-типом или является POD-класс-типом, то разница будет. В первом случае value-initialization сведется к обнулению, а во втором никакой инициализации не будет вообще.

Если это не-POD-класс-тип без явно объявленного конструктора, то в первом случае будет рекурсивно применена value-initialization к каждому подобъекту этого класса (что при этом получится — зависит о типов этих подобъектов), а в втором случае будет просто вызван неявно объявленный конструктор всего класса 'B' (что при этом получится — опять же зависит от типов подобъектов класса). В общем случае — будет разница.

Если же это класс-тип с явно объявленным конструктором, то в обоих случаях просто вызовется этот конструктор. Разницы не будет.

Т.е. без дополнитеьной информации о типе 'B' конкретного ответа на твой вопрос дать нельзя.

А>И ещё вопрос:


void func (int *&val);

А>так вот, вывод был что это ссылка на укзатель,

Да, это ссылка на указатель.

А>но ведь по логике должен быть указатель на ссылку,


Это по какой такой логике? В упор не вижу. К тому же в языке С++ не бывает указателей на ссылку.

А>хотя такое не может быть так как адрес ссылки есть адрес самого объекта.


Уточни вопрос.
Автор: Андрей Тарасевич    Оценить