![](/img/trans.png)
[英]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.