Какая разница между new T и new T()
От: Андрей Тарасевич Беларусь  
Дата: 07.12.04 09:19
Оценка: 105 (11)
#Имя: FAQ.cpp.newnnew
А>Какая разница между

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);

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

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

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


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

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


Уточни вопрос.
Best regards,
Андрей Тарасевич
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.