intmain(){ // 创建shared_ptr autoptr1 = std::make_shared<SharedClass>(); { // 创建另一个指向同一对象的shared_ptr std::shared_ptr<SharedClass> ptr2 = ptr1; std::cout <<"使用计数: "<< ptr1.use_count() << std::endl;// 输出 2 // 从对象内部获取shared_ptr autoptr3 = ptr1...
std::shared_ptr是一种支持共享所有权的智能指针。多个std::shared_ptr可以同时管理同一个对象,当最后一个std::shared_ptr被销毁时,资源才会被释放。 示例:用std::shared_ptr实现共享资源 #include<iostream> #include<memory> intmain%28%29{ //用shared_ptr创建一个共享的整数 std::shared_ptr<int>ptr1=s...
shared_ptr作为另一个常用的智能指针,它和unique_ptr智能指针的理念有着很大的不同,它提供了对资源共享管理,即对资源所有权的共享(shared ownership),这就要求shared_ptr必须是一个可复制的对象。但是由于shared_ptr对象有很多个,而具体的对象资源只有一个这就要求所有共享对象资源的shared_ptrs指针中最终只能有...
std::shared_ptr的引用计数虽然很强大,但它也有一个“致命弱点”——循环引用。如果两个对象互相持有std::shared_ptr,就会导致内存泄漏,因为引用计数永远不会归零。 #include <iostream>#include <memory> class B; // 前向声明 class A {public: std::shared_ptr<B> b_ptr; ~A%28%29 { std::cout <...
std::cout << "Value: " << ptr1->GetValue() << std::endl; // 创建另一个 shared_ptr,共享 ptr1 所指向的对象 std::shared_ptr<MyClass> ptr2(ptr1); // 当 ptr1 和 ptr2 都离开作用域时,MyClass 对象会被自动释放 } // 2 共享 ...
C++11 引入了智能指针来自动管理内存,主要包括std::unique_ptr和std::shared_ptr。这两种智能指针各有特点,适用于不同的场景。 std::unique_ptr 特点:std::unique_ptr是一种独占式智能指针,它保证同一时间只有一个指针拥有对对象的所有权。当std::unique_ptr被销毁时,它所指向的对象也会被自动删除。
2.用std::make_shared<>()或std::make_unique<> 不得行,莫得这种操作,可以用上面那种然后 =std::move(); 3.其他方式的自定义删除器 //数组放在堆中std::shared_ptr<Sample>p(newSample[5],std::default_delete<Sample[]>()); //仿函数方式classDeleter{public:voidoperator()(Sample*x){std::cout<...
std::unique_ptr和std::shared_ptr可以通过以下方式使用:
std::unique_ptr 是一种独占的语义,即只允许一个智能指针引用裸指针,这区别于 std::shared_ptr 允许多个 shared_ptr 引用同一个裸指针,它没有引用计数,它的性能比 shared_ptr 会高一点。
std::unique_ptr和std::shared_ptr可以通过以下方式使用: // C++11语法 std::unique_ptr<MyClass> my_unique_ptr(new MyClass()); std::shared_ptr<MyClass> my_shared_ptr(new MyClass()); // C++14提供了更安全的方法 auto my_unique_ptr = std::make_unique<MyClass>(); auto my_shared_ptr...