[英]C++ : Why reference to stack allocated object treated same as reference to heap allocated object?
[英]Could be an object created on the heap treated as 'being on stack' in C++?
有代码:
struct FooBar
{
FooBar()
{
MyObject obj;
/// when c-tor is ended, obj must be deleted through d-tor call
}
};
...
FooBar* fooBar(new FooBar);
fooBar
在堆上分配。 但是FooBar
的构造函数中的对象MyObject obj
不知道它的创建位置。 那么在FooBar
上下文中MyObject
实例化可以像在堆栈中创建的FooBar
对待吗?
分配在堆上的对象是否具有自己的堆栈? 这种堆栈的大小是多少?
obj
在示例中分配在堆栈上(“普通”堆栈,在调用new FooBar
的代码中使用的“相同”-假定您的环境有一个堆栈开始)。
this
指向堆上某处的事实并不会改变构造函数是(相对)普通函数调用的事实,并且使用与其他函数相同的堆栈。
C ++不了解堆栈或堆。 它确实知道具有自动和动态存储持续时间的对象。 在您的情况下, fooBar
具有动态存储持续时间(因为它是使用new
创建的)。 它会一直存在,直到您对其调用delete
。 obj
具有自动存储期限(因为它不是使用new
创建的)。 当封闭函数( FooBar
)结束时,其生存期结束。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.