拥有代码:
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
实例化是否可以像在堆栈中创建一样处理?
堆上分配的对象是否有自己的堆栈?这种堆栈的大小是多少?
答案 0 :(得分:6)
obj
在您的示例中的堆栈上分配(“普通”堆栈,调用new FooBar
的代码中使用的“相同” - 假设您的环境有一个堆栈开始)。
this
指向堆上某处的事实并没有改变构造函数是(相对)普通函数调用的事实,并且使用与其他函数相同的堆栈。
答案 1 :(得分:4)
C ++不了解堆栈或堆。它确实了解具有自动和动态存储持续时间的对象。在您的情况下,fooBar
具有动态存储持续时间(因为它是使用new
创建的)。它会一直存在,直到你打电话给delete
。 obj
具有自动存储持续时间(因为它不是使用new
创建的)。当封闭函数(FooBar
- 构造函数)结束时,它的生命周期结束。