簡體   English   中英

C++中的對象是如何存儲的? 在堆或堆棧中?

[英]how Objects in C++ stored? in heap or stack?

#include <string>
#include <iostream>



class Type {
public:
    int x;
    Type(int a)
    {
        x = a;
    }

    Type(const Type& type1)
    {
        std::cout << "copy" << std::endl;
    }
};

Type Func() 
{
    Type s(1);
    std::cout << &s << std::endl;
    return s;
}

int main()
{
    Type c = Func();
    std::cout << &c << std::endl;
    std::cout << c.x << std::endl;
    system("pause");
}

C++ 為堆或堆棧中的對象分配內存? 在 Func 中,假設 "s" 是在棧中分配的,那為什么不解構呢? 為什么我仍然可以在 main() 中調用它。 我很困擾。

默認情況下,對象存儲在堆棧中(除非它們的實現具有動態分配器,例如映射)。 如果您有自己的類並將其實例化,它將存在於堆棧中。 但是,不建議這樣做,因為堆棧可能被視為一種寶貴且稀缺的資源。 如果您有一個重對象或許多輕對象,最好動態分配它們。

在現代 C++ 版本中,我們有所謂的移動語義移動構造函數(可以由編譯器自動生成)。 基本上,編譯器會優化您的代碼。 在這種情況下,當s無論如何都將被銷毀時,將對象s復制到c將是低效的。 移動構造函數所做的基本上是從s竊取數據並將其直接提供給c (在這種情況下,只需使用c作為存儲 s 的內存位置的別名)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM