有代码:
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
的上下文中可以像在堆栈中创建一样处理吗?
在堆上分配的对象有自己的堆栈吗?这种堆栈的大小是多少?
obj
是在您的示例中的堆栈上分配的("普通"堆栈,在调用new FooBar
的代码中使用的"相同"堆栈-假设您的环境有一个堆栈开始)。
this
指向堆上的某个地方的事实并不改变构造函数是一个(相对)普通的函数调用的事实,并且使用与其他函数相同的堆栈
c++不知道堆栈或堆。它知道具有自动和动态存储时间的对象。在您的示例中,fooBar
具有动态存储持续时间(因为它是使用new
创建的)。它会一直存在,直到你调用delete
。obj
具有自动存储持续时间(因为它不是使用new
创建的)。它的生存期在封闭函数(FooBar
-构造函数)结束时结束。