Что такое куча?(используя «новый») - PullRequest
0 голосов
/ 12 февраля 2012

Вы не можете вернуть адрес чего-то, что определено локально, поэтому вы должны выделить память в «куче» для размещения этого элемента, чтобы другие функции в программе могли получить к нему доступ. Может кто-нибудь объяснить это более подробно, пожалуйста.

MyClass* myFunc() 
{
    MyClass* pMC = new MyClass;
    return pMC;
}

Какова цель * в имени функции? Что это означает? Я понимаю, что создается указатель типа MyClass, и он указывает на новое размещение в «куче» этого объекта. Я просто не понимаю, в чем именно заключается эта польза.

1 Ответ

2 голосов
/ 12 февраля 2012

Это означает, что объект будет существовать всегда, пока он не будет явно уничтожен.

Самостоятельно справляться с этим уничтожением - очень плохая идея по большому количеству причин, и существует ряд схем, которые автоматически очищают его в различных точках - например, уникальное или общее владение. Это означает, что код, который использует new напрямую, очень плохой, и втрое такой же для new[], delete или delete[].

В уникальном владении есть один указатель (std::unique_ptr<T>), который владеет объектом, и когда он уничтожается, объект уничтожается. Это только для перемещения. В совместном владении, когда любой (std::shared_ptr<T>), который указывает на объект, является живым, объект остается живым. Когда последний уничтожается, объект также уничтожается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...