shared_ptr类中get()成员的用途是什么?

Cpp*_*mer 5 c++ smart-pointers shared-ptr c++11

我的问题是,可以使用shared_ptr类中的get()成员的各种方法是什么?为什么我们不能使用删除删除它?

Rya*_*ing 11

如果你有一个函数采用原始指针

void f(T *t); // non-owning pointer
Run Code Online (Sandbox Code Playgroud)

并且您有一个指向T对象的智能指针,您可以使用它将其传递给该函数get()

std::shared_ptr<T> sp{new T};  // or unique_ptr
//f(sp); // no good, type mismatch
f(sp.get()); // passes the raw pointer instead
Run Code Online (Sandbox Code Playgroud)

采用原始指针的API很常见,但仍然很有用.我建议你看一下2014年CppCon 上Herb Sutter的演讲的这一部分,可能还有它周围的部分.

你应该不尝试删除这个指针,智能指针类假设你不会做这样的事情,并会仍然可以自由在自己的析构函数被管理对象在时机成熟时(毕竟,如何将它知道你删除了?) .

智能指针的作用是管理对象并在正确的时间将其删除,如果您想手动管理对象的生命周期(通常不推荐),则使用原始指针.

如果您确实想要拥有a的所有权,unique_ptr您可以通过致电来实现release().