繁体   English   中英

在C ++中可以将在堆上创建的对象视为“堆栈中”吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM