簡體   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