我有在C++中實例化對象一個簡單的問題: 如果我們假設我班有一個默認的構造函數,然後創建新的對象這樣的:錯誤,而一個類實例化
PfAlgorithm object = new PfAlgorithm();
但是當我跑我得到這個錯誤:
conversion from ‘PfAlgorithm*’ to non-scalar type ‘ns3::PfAlgorithm’ requested
有人可以向我解釋這個錯誤的原因嗎? 非常感謝。
我有在C++中實例化對象一個簡單的問題: 如果我們假設我班有一個默認的構造函數,然後創建新的對象這樣的:錯誤,而一個類實例化
PfAlgorithm object = new PfAlgorithm();
但是當我跑我得到這個錯誤:
conversion from ‘PfAlgorithm*’ to non-scalar type ‘ns3::PfAlgorithm’ requested
有人可以向我解釋這個錯誤的原因嗎? 非常感謝。
new
運算符返回一個指針,而不是一個值。所以,你需要寫:
PfAlgorithm* object = new PfAlgorithm()
凡object
是一個指向新分配的PfAlgorithm對象。關於指針的一些簡單的介紹性信息可以參見here。然而,正如在下面的評論中所討論的那樣,處理原始指針(由於內存泄漏的潛在問題,不明確的所有權等問題)幾乎不是一個好主意。繼續閱讀...
在堆中分配此對象後,您需要確保在完成時刪除它,否則應用程序將泄漏內存。爲了簡化操作,我強烈建議您考慮使用來自boost libraries(或C++ 11)的智能指針來管理您的內存。
另外,各種其他人所說,你可以簡單地做:
PfAlgorithm object;
而棧上分配的對象,而不必擔心如何管理內存。
你有可能在Java中比在C++中更有經驗嗎?
PfAlgorithm object;
創建PfAlgorithm
型蠻好的對象:與Java,C++中,你不要當你實例化一個對象需要new
。當變量超出範圍時,該對象會自動銷燬。
C++區分一個對象(在你的情況下是PfAlgorithm類型)和一個指向對象的指針(PfAlgorithm *)。 new PfAlgorithm()
表達式返回一個指向新分配的對象的指針。如果這是你想要的,你還必須讓object
有一個指針的類型:
PfAlgorithm *object = new PfAlgorithm();
如果你不希望使用指針,擺脫new
的:
PfAlgorithm object = PfAlgorithm();
在第一種情況下,一旦你不再使用它,你將不得不使用delete
;在第二種情況下,該對象將在退出創建它的塊({...}
)時被銷燬。沒有Java或C#中的自動內存管理。
這樣做比所需的更復雜。丟失指針(因此是'new')。鑑於OP提供的詳細程度,這只是**不是**可接受的解決方案。 – 2012-07-09 20:20:37
@KonradRudolph。好。我很欣賞指針是複雜的。但是,坦率地說,你不會對C++有太多瞭解,而不瞭解它們。所以我認爲另外包含一個堆棧分配(正如其他人所做的那樣,正如我已經包括的那樣)是完全有效的,但是斷言這不是一個可接受的解決方案,而是非常極端。 – 2012-07-09 20:26:05
感謝您的回覆。 – user1499125 2012-07-09 20:28:21