首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 僅宣告物件而不立即建構的正確做法

     編輯:程式設計綜合問答

問題

如何在 C++ 中「只宣告、不立即建構」物件(非指標),即類似 A instance; 而非 A* pInstance?

核心觀念

C++ 中 **宣告即定義**,只要寫 A instance;,編譯器就會在堆疊上配置記憶體並**呼叫預設建構函式**。若類別無預設建構函式,編譯報錯。

真正的「延遲建構」方案

  1. 指標/智慧指標:A* p = nullptr; 稍後 p = new A(args); 或 std::unique_ptr<A> p = std::make_unique<A>(args);。
  2. std::optional (C++17):std::optional<A> opt; 稍後 opt.emplace(args);,物件存於 optional 內部儲存空間,無動態分配。
  3. placement new:預先配置原始記憶體 alignas(A) char buf[sizeof(A)];,需要時 new (buf) A(args);,銷毀時手動呼叫解構函式。
  4. 分離宣告與定義:僅在標頭檔 extern A instance;,單一 cpp 檔定義 A instance(args);,但程式啟動前仍會建構。

建議

現代 C++ 首選 std::optional 或智慧指標,語意清晰且安全。避免手動 placement new 除非極度效能敏感。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved