不过shared_ptr与unique_ptr场景又有所不同,这里主要是一个raw pointer在不同的代码块之间传来传去的场景,或者指针指向的内存比较大,这段内存可以切分成很多小部分,但是他们却需要共享彼此的数据。参考官方文档: std::shared_ptr is a smart pointer that retains shared ownership of an object through a pointer...
上面的代码可以使用shared_ptr来改写,更简单: #include<memory> //使用shared_ptr需要包含这个头文件 using namespace std; void g(void){ shared_ptr<int> ptr = make_shared<int>();//手动申请一个堆上的无名int变量,交给智能指针对象ptr来管理 int b; //这里无须手动释放ptr指向的内存,ptr的析构函数会...
该类继承于__shared_ptr,构造函数也只是调用了__shared_ptr的构造函数而已,将接管的普通指针传递给__shared_ptr 该类没有重载*和->运算符,从这点看shared_ptr似乎无法实现普通指针的功能,推测这两个运算符的重载是在父类__shared_ptr实现的 该类没有析构函数,从智能指针最终会自动释放内存的特性来看,释放工作...
shared_ptr定义 shared_ptr 是C++11提供的一种智能指针类,又被称为共享指针,它足够智能,可以在任何地方都不使用时自动删除相关指针,从而帮助彻底消除内存泄漏和悬空指针的问题。 它遵循共享所有权的概念,即不同的 shared_ptr 对象可以与相同的指针相关联,并在内部使用引用计数机制来实现这一点。
自动释放:当最后一个std::shared_ptr离开作用域时,引用计数变为零,自动调用对象的析构函数,防止内存泄漏。 对象共享:多个std::shared_ptr可以指向同一对象,简化了资源共享的实现。 异常安全:std::shared_ptr的引用计数会自动管理,不会因为函数异常退出而泄漏内存。
《为何优先选用unique_ptr而不是裸指针?》中说到,如果有可能就使用unique_ptr,然后很多时候对象是需要共享的,因此shared_ptr也就会用得很多。shared_ptr允许多个指向同一个对象,当指向对象的最后一个shared_ptr销毁时,该对象也就会自动销毁。因此,善用shared_ptr,能够远离内存泄漏。
// Use make_shared function when possible.autosp1 = make_shared<Song>(L"The Beatles",L"Im Happy Just to Dance With You");// Ok, but slightly less efficient.// Note: Using new expression as constructor argument// creates no named variable for other code to access.shared_ptr<Song> sp2...
如何:创建和使用 shared_ptr 实例 如何:创建和使用共享 weak_ptr 实例 如何:创建和使用 CComPtr 和 CComQIPtr 实例 C++ 中的异常处理 断言和用户提供的消息 模块 模板 事件处理 Microsoft 专用的修饰符 编译器 COM 支持 Microsoft 扩展 非标准行为 编译器限制 ...
// Use make_shared function when possible.autosp1 = make_shared<Song>(L"The Beatles",L"Im Happy Just to Dance With You");// Ok, but slightly less efficient.// Note: Using new expression as constructor argument// creates no named variable for other code to access.shared_ptr<Song> sp2...