c++ - 我应该总是在 C++ 11 中使用智能指针吗?

标签 c++ c++11 shared-ptr

<分区>

从 C++ 11 开始,我可以在不创建和删除原始指针的情况下编写代码。 但这是正确的方法吗?我应该始终使用智能指针(共享的、唯一的还是弱的),还是在某些情况下我应该自己删除对象?

最佳答案

很难想象您想手动删除对象的情况,因此从这个意义上说,您问题的答案是“是的,始终使用智能指针”。

但是,原始指针还有另一个用例。智能指针都是关于授予所有权 语义。 unique_ptr 拥有它指向的对象的独占所有权,并且当指针超出范围时将销毁该对象。 shared_ptr 实现了共享 所有权,当最后一个共享指针超出范围时,该对象将被销毁。

原始指针对于您想要指向一个对象而不指示任何类型的所有权的情况仍然有用。您只是指向一个您知道存在的对象,其他人(拥有它的人)会在时机成熟时将其删除。

原始指针用于指向对象。智能指针用于拥有对象。

关于c++ - 我应该总是在 C++ 11 中使用智能指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21734848/

相关文章:

c++ - C++ 中的类型双关问题

C++ 输入文件没有将我的整个文件读回字符串

C++11 移动和重新分配

c++ - std::unordered_map 带有用于自动销毁条目的共享指针

c++ - 对 shared_ptr 的引用的引用计数

c++ - 根据成员的存在选择模板函数

c++ - opengl中如何用鼠标点击获取帧缓冲区中绘制图形的像素信息

c++ - 如何从一个函数锁定 shared_mutex 并从另一个函数解锁它?

c++ - 将派生类的 std::shared_ptr 转换为基类的 std::shared_ptr

c++ - 从 QThread 中运行的 C 代码显示 QMessageBox