如Wiki所示,shared_ptr
可以处理堆空间回收问题。
所以,我总是使用shared_ptr创建实例,有问题吗?
我就这样使用它,我不需要delete s
,对吧?
s = std::shared_ptr<S>(new S).get();
答案 0 :(得分:3)
您不应该总是使用shared_ptr
,因为存在more types of smart pointer而不是shared_ptr
。例如,标准库还提供unique_ptr
。您必须评估哪个更适合手头的任务。
但是,一般而言,智能指针是安全处理现代C ++中动态分配的对象的首选方式。根据一般经验,除非遇到无法使用new
和delete
才能解决的问题,否则请避免使用它们。
顺便说一句,您的示例无法按预期工作。
auto s = std::shared_ptr(new S).get();
这将创建一个悬空指针。对new
的调用会动态分配一个S
类型的对象。指向该指针的指针将提供给shared_ptr
的构造函数,该构造函数现在可以管理对象的生存期。然后,您通过S
将s
的原始指针的副本分配给get()
。在该行的末尾,shared_ptr
析构函数释放S
,这意味着s
所指向的内容都是不确定的。
创建共享指针的正确方法是:
auto s = std::make_shared<S>();