Выделенная куча объектов C++ и переменная-член

class OtherClass
{
    ...
};

class Test
{
    OtherClass otherClass;
};

int main()
{
    Test *pTest = new Test;
}

pTest указывает на объект типа Test. Выделяется ли otherClass в куче или в стеке?


person user1365914    schedule 24.11.2012    source источник
comment
возможный дубликат члены данных размещены в том же пространстве памяти, что и их объекты в C++?   -  person juanchopanza    schedule 24.11.2012


Ответы (2)


Test *pTest = new Test;

Создает объект Test в Freestore(Heap), и все члены Test также находятся в одном и том же.
Итак, да.

Обратите внимание, что технически стандарт никогда не использует термины «куча» или «стек», но да, вы можете предположить их, потому что они используются почти во всех реализациях.

person Alok Save    schedule 24.11.2012
comment
Что, если бы это было: OtherClass *pOtherClass = new OtherClass; - person user1365914; 24.11.2012
comment
@user1365914: user1365914: Как только вы используете new, объект будет создан в свободном магазине, и ваш указатель будет указывать на него. - person Alok Save; 24.11.2012

Он выделен в куче. Поскольку pDataMember является элементом данных с типом OtherClass (не указателем!), он является частью памяти, выделенной для объекта класса Test, поэтому он будет расположен там, где находится объект Test.

Может быть, не стоит называть неуказатель pDataMember? Это сбивает с толку.

person JohnB    schedule 24.11.2012