回答
而且这是为什么不工作? 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. 从此指针创建共享指针
- 5. 共享指针参考
- 6. 共享指针向量
- 7. C++共享指针问题
- 8. 指针和共享内存
- 9. 共享指针双删除
- 10. 共享指针声明
- 11. 复制包含共享指针列表的共享指针后面的对象
- 12. 创建将共享指针作为参数的对象的共享指针
- 13. 通过共享内存进程之间共享指针IPC
- 14. 转换参考共享指针
- 15. 循环依赖与共享指针
- 16. 线程之间共享指针吗?
- 17. 共享内存段内的指针
- 18. 在地图中使用共享指针
- 19. 段错误与共享指针
- 20. 共享内存中的指针
- 21. 共享指针的处理是什么?
- 22. 子进程之间共享指针
- 23. 指针数组,共享对象
- 24. OpenMP和共享结构和指针
- 25. 共享指针多个派生进程
- 26. Ç共享存储器指针映射
- 27. 将NULL共享指针交给引用?
- 28. 当共享指针被破坏?
- 29. 替换共享指针的内容?
- 30. 共享指针的向量迭代器
为什么在这种情况下你需要共享指针?这听起来是你正试图解决一个XY问题。测试代码可以使用引用来修复:'auto&test = Singleton :: Instance();'。 –