Для задания по программированию нам дан шаблонный класс с двумя членами, объявленными не как указатели, а как реальные объекты:
Foo member;
В конструкторе я сначала попробовал member = *(new Foo());
, но узнал, что, по крайней мере иногда, он копировал новый объект Foo и, следовательно, вызывал утечки памяти.
Наконец я обнаружил member = Foo()
, а затем посмотрел, в чем разница. Я узнал, что элемент будет выделен в стеке, а не в куче, и что он будет удален, как только выйдет за пределы области видимости. Но как это работает для объектов?
Удаляется ли член только при удалении родительского объекта/класса?
У меня также есть еще один вопрос о member = *(new Foo());
. Я инициализировал две переменные-члены одного типа:
// Members
Foo member1;
Foo member2;
// Constructor {
member1 = *(new Foo());
member2 = *(new Foo());
}
Почему-то казалось, что member1
не копируется и сохранил тот же адрес, что и исходный Foo
(т.е. утечки памяти при удалении не было). member2
, однако, будет скопирован и будет иметь другой адрес, и произойдет утечка памяти. Есть ли этому объяснение?
class
и нужно было сильно полагаться наstructs
, но мы говорили о C++. Я думал, что основные принципы создания объектов в C++/Java одинаковы, и я не уверен, что понимаю, что вы подразумеваете под детерминированным временем жизни. Тем не менее, я думаю, вы уловили то, что нужно было сказать в комментариях, сказав, что один из них ориентирован на ценность, а другой - на ссылку. - person vol7ron   schedule 13.02.2011