回答
而且這是爲什麼不工作? auto test = Singleton :: Instance();
如果你看看編譯錯誤,它會告訴你。
main.cpp:31:37: error: use of deleted function 'Singleton::Singleton(const Singleton&)'
您試圖複製對象。但複製構造函數被刪除,因此該類型不可複製。
你可能是爲了做一個參考,而不是一個副本:
auto& test = Singleton::Instance();
我怎樣才能讓一個指針......這樣做呢?
你可以把它的地址與運營商的地址的分配指針單:
auto* test = &Singleton::Instance();
或共享的指針
你不能有共同的指針有靜態存儲的對象 - 除非你使用特殊的刪除器,但這樣的共享指針幾乎沒有用處。由於你的單例有靜態存儲,所以你不想使用共享指針。您可以修改您的單例以將靜態存儲的共享指針保留爲動態分配的對象。然後你可以有一個共享指針。
中聲明的私有成員,您將要給shared_ptr一個空刪除器 –
啊 - 完美。合理。 非常感謝:) 這是一個單身人士的好方法嗎? – Waterplant
用這種方法不可能手動刪除對象 - 對嗎?或者有什麼辦法? – Waterplant
爲什麼沒有共享指針作爲類的成員,並返回?
所以你必須
shared_ptr<Singleton> Instance()
{
if(!myInstance)
{
myInstance.reset(new Singleton());
}
return myInstance;
}
private:
shared_ptr<Singleton> myInstance;
我試過了 - 但是我收到的消息是: 「無法訪問在類」 – Waterplant
原始指針:Singleton* ptr = &Singleton::Instance();
或auto ptr = &Singleton::Instance();
參考:Singleton& ref = Singleton::Instance();
或auto& ref = Singleton::Instance();
你不應該使用共享指針(因爲你沒有自己的單身目的)。不是沒有相應地改變單身人士班。
爲什麼yoour代碼沒有工作:auto
演繹類型爲值類型,並試圖複製instance()
結果。由於Singleton
是無法複製的,因此失敗。
- 1. 共享指針:指針的指針
- 2. C++智能指針:共享指針與共享數據
- 3. 刪除共享指針
- 4. C++共享指針問題
- 5. 複製包含共享指針列表的共享指針後面的對象
- 6. 如何序列化共享/弱指針?
- 7. 共享指針的向量迭代器
- 8. 段錯誤與共享指針
- 9. 轉換參考共享指針
- 10. C中共享庫的訪問指針
- 11. .reset對共享指針做了什麼
- 12. 返回一個共享指針
- 13. 繼承的共享指針未能get_widget
- 14. 來自Boost庫的共享指針
- 15. 垃圾收集與共享指針
- 16. 共享指針正向聲明
- 17. Ç共享存儲器指針映射
- 18. dlopen和共享對象'指針'
- 19. 指針數組,共享對象
- 20. OpenMP和共享結構和指針
- 21. 調用定製刪除共享指針
- 22. 獲得從一個共享指針的解除引用的值的共享指針
- 23. 如何與另一個小部件共享共享小部件指針
- 24. C++:創建一個共享的對象,而不是共享的對象指針
- 25. 共享指針和指向的常量性對象
- 26. 如何更改由一組共享指針指向的對象?
- 27. 我怎樣才能設置一個共享指針到一個普通指針
- 28. 您可以將共享指針與非指針數據成員混合嗎?
- 29. 空指針異常調用共享偏好的對象
- 30. 共享相同變量的結構的函數指針
爲什麼在這種情況下你需要共享指針?這聽起來是你正試圖解決一個XY問題。測試代碼可以使用引用來修復:'auto&test = Singleton :: Instance();'。 –