我的问题是,shared_ptr类的get()成员有哪些不同的用法?为什么不能使用< strong > delete < /strong >来删除它?
我的问题是,shared_ptr类的get()成员有哪些不同的用法?为什么不能使用< strong > delete < /strong >来删除它?
void f(T *t); // non-owning pointer
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
使用原始指针的API很常见,而且仍然有用。我建议你观看CppCon 2014中Herb Sutter的演讲的这部分链接,可能还要看看周围的部分。
你不应该尝试删除这个指针,智能指针类假设你不会做任何这样的事情,当时机到来时,智能指针仍然会在自己的析构函数中释放被管理的对象(毕竟,它怎么知道你已经删除了它?)。
智能指针的工作是管理对象并在适当的时候删除它,如果你想手动管理对象的生命周期(通常不推荐),那就使用原始指针。
如果你确实想要承担unique_ptr
的所有权,可以通过调用release()
来实现。
get()
。
shared_ptr
类管理指针的所有权,因此当智能指针的生命周期结束时,它将自动删除所拥有的内存。如果你试图手动删除内存,那么当shared_ptr
尝试去释放时会导致未定义行为。
get()
。如果您执行delete sp.get();
,则很可能会得到未定义的行为,这是当之无愧的结果。 - Praetorian