Может ли объект, созданный в куче, рассматриваться как «находящийся в стеке» в C ++? - PullRequest
0 голосов
/ 19 декабря 2011

Иметь код:

struct FooBar
{
  FooBar()
  {
    MyObject obj;

    /// when c-tor is ended, obj must be deleted through d-tor call
  }
};
...
FooBar* fooBar(new FooBar);

fooBar выделяется в куче.Но объект MyObject obj внутри конструктора FooBar не знает, где он создан.Так может ли MyObject создание экземпляра в контексте FooBar рассматриваться так, как если бы он был создан в стеке?

Имеет ли объект, размещенный в куче, свой собственный стек?Каков размер такого стека?

Ответы [ 2 ]

6 голосов
/ 19 декабря 2011

obj выделяется в стеке в вашем примере («обычный» стек, «тот же», который используется в коде, который вызывает new FooBar - при условии, что в вашей среде для начала есть стек).

Тот факт, что this указывает где-то в куче, не меняет того факта, что конструктор является (относительно) обычным вызовом функции, и использует тот же стек, что и другие функции.

4 голосов
/ 19 декабря 2011

C ++ не знает о стеке или куче. Он знает об объектах с автоматическим и динамическим сроком хранения. В вашем случае fooBar имеет динамическое время хранения (потому что оно создано с использованием new). Он будет жить, пока вы не позвоните delete. obj имеет автоматический срок хранения (поскольку он не создается с использованием new). Его время жизни заканчивается, когда завершается включающая функция (FooBar -конструктор).

...