jlc*_*lin 1 c++ pointers shared-ptr c++11
我对指针很缺乏经验,而且我遇到了简单指针与a之间差异的问题std::shared_ptr.我想使用一个,shared_ptr所以当没有任何指向时,我不必非常小心地删除该对象.
我正在使用我正在使用的库/标题(easylogging ++).我不认为它是外部库的问题,但我使用指针.该库有一个函数,它返回一个指向对象的简单指针.我总是把简单的指针转换成shared_ptr麻烦发生的地方.
// Works fine---but I want a shared_ptr
Object* MyInstance(ReturnPointerToObject(...));
// Compiles fine, but crashes during deallocation of the Object (Seg fault?)
std::shared_ptr<Object> MyInstance(ReturnPointerToObject(...));
Run Code Online (Sandbox Code Playgroud)
当程序结束时释放内容时,我的程序崩溃了.
问题:
shared_ptr这样的好主意还是坏主意?当您构造一个shared_ptr对象(从现有shared_ptr或weak_ptr该对象以外的任何东西)时,您正在创建一个新方案来管理对象的生命周期.如果其他东西已经控制了该对象的生命周期,那么这是一件完全破碎的事情.例如,如果ReturnPointerToObject返回指向其他人对象的指针,则无权控制对象的生命周期,因此创建一个对象shared_ptr就是破坏行为并导致delete被错误地调用.
我也建议不要使用shared_ptr你实际上不需要共享指针的地方.C++方式是您不为不使用的内容付费,并且unique_ptr对于不需要共享的情况存在其他机制(例如).当然,你应该采取尽可能避免裸指针的政策.