在堆上创建的对象是否可以被视为C++中的'being on stack'?



有代码:

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

fooBar在堆上分配。但是对象MyObject objFooBar的构造函数不知道它是在哪里创建的。那么MyObject实例化在FooBar的上下文中可以像在堆栈中创建一样处理吗?

在堆上分配的对象有自己的堆栈吗?这种堆栈的大小是多少?

obj是在您的示例中的堆栈上分配的("普通"堆栈,在调用new FooBar的代码中使用的"相同"堆栈-假设您的环境有一个堆栈开始)。

this指向堆上的某个地方的事实并不改变构造函数是一个(相对)普通的函数调用的事实,并且使用与其他函数相同的堆栈

c++不知道堆栈或堆。它知道具有自动和动态存储时间的对象。在您的示例中,fooBar具有动态存储持续时间(因为它是使用new创建的)。它会一直存在,直到你调用deleteobj具有自动存储持续时间(因为它不是使用new创建的)。它的生存期在封闭函数(FooBar -构造函数)结束时结束。

最新更新