shared_ptr类中的 get() 成员有什么用
What are the uses of get() member from the shared_ptr class?
我的问题是,shared_ptr类中的get()成员可以通过哪些方式使用?为什么我们不能使用删除来删除它?
如果你有一个函数接受原始指针
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 很常见,但仍然有用。 我建议你看一下Herb Sutter在CppCon 2014上的演讲的这一部分,可能还有围绕它的部分。
您不应该尝试删除此指针,智能指针类假定您不会执行类似操作,并且智能指针仍将在时机成熟时释放其自己的析构函数中的托管对象(毕竟,它怎么知道您删除了它?
智能指针的工作是管理对象并在正确的时间将其删除,如果要手动管理对象的生存期(通常不推荐),请使用原始指针。
如果您确实想获得unique_ptr
的所有权,可以通过调用 release()
来实现。
通常,
当您需要将原始指针传递给接受此类指针的 API 时,您会使用 get()
。
shared_ptr
类管理指针的所有权,因此它将在智能指针的生存期结束时自动删除拥有的内存。如果您尝试自己删除内存,那么当shared_ptr
尝试释放时,您最终会遇到未定义的行为。
相关文章:
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 重载运算符的范围是什么?它是否会影响作为类成员的集合的插入函数?
- 常量公共成员有什么问题?
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- Visual C++: MSVC vs. GCC+CLANG: 处理 lambda 捕获类成员变量,正确的方法是什么?
- 什么是更好的做法?通过指针或标识符传递类成员?
- 什么可以防止类中相邻成员重叠
- 指针类型类成员的动态强制转换的恒定性是什么?
- 删除类成员的动态分配内存的最佳方法是什么
- 使用 const char* 初始化 const ref 字符串成员时幕后会发生什么
- 初始化类成员的更好做法是什么?
- 键入擦除成员函数指针的"right"方法是什么?
- 构造函数中没有参数的对象类成员按什么顺序初始化?
- 使用只有一个成员的工会的目的是什么?
- 什么是指向成员模板参数的指针
- 常量成员和没有setter的私有成员之间有什么区别
- C++:允许临时对象调用非常量成员函数的设计理念是什么?
- 为什么我应该在scanf()-家族成员中包含一个长度修饰符作为参数?有什么好处?使用长度修改器进行扫描的作用
- 命名空间 Win 没有成员"simpleControl"是什么意思
- constexpr静态成员什么时候停止成为constexpr