#include<iostream>#include<memory>intmain(){structC{int a=1;int b=2;};std::shared_ptr<C>p1(newC);std::unique_ptr<int>p2(newint(40));std::shared_ptr<int>p3=std::make_shared<int>(15);std::unique_ptr<int>p4=std::make_unique<int>(10);std::weak_ptr<int>p5=p3;std::cout<<...
一个unique_ptr拥有它指向的对象的独占所有权,并且会在指针超出范围时销毁该对象。unique_ptr明确地阻止复制其包含的指针。不过可以使用std::move函数必须用于将包含的指针的所有权转移给另一个unique_ptr。示例代码 2、shared_ptr 引用计数的智能指针。当您想要将一个原始指针分配给多个所有者时使用,例如,当您从...
C.149:使用unique_ptr或者shared_ptr避免忘记销毁使用new创建的对象 Reason(原因) Avoid resource leaks. 避免资源泄露。 Example(示例) void use(int i) { auto p = new int {7}; // bad: initialize local pointers with new auto q = make_unique<int>(9); // ok: guarantee the release of the ...
}unique_ptr<int>cl1(intp){returnunique_ptr<int>(newint(p)); }unique_ptr<int>cl2(intp){unique_ptr<int>rt(newint(p));returnrt; }voidfl1(unique_ptr<int> p){ *p =100; }intmain(){//test1 不可以拷贝和赋值/* unique_ptr<int> p1(new int(11)); //unique_ptr<int> p2(p1);//N...
unique_ptr weak_ptr 二,下表是shared_ptr和unique_ptr都支持的操作 上面操作的验证代码 #include <memory> #include <iostream> #include <vector> using namespace std; class Test{ public: Test(int d = 0):data(d){cout << "cr:" << data << endl;} ...
std::unique_ptr<int> sp_i2 = std::move(sp_i1); std::cout << *sp_i2 << std::endl; std::cout << *sp_i1 << std::endl; // 运行崩溃,所有权已经移交给sp_i2,sp_i1变成空指针了,可以重新赋值 3、shared_ptr shared_ptr使用引用计数技术来管理内存(正如Objective-C中的内存管理),引用...
unique_ptr:独占式拥有指针,保证只有一个智能指针指向对象。shared_ptr:共享式拥有指针,多个智能指针可以指向同一个对象,并自动管理引用计数。智能指针主打离开作用域的时候自动释放内存,所以使用智能指针可以简化内存管理,提高代码安全性。malloc函数:分配指定字节数的内存空间,并返回指向该空间的 void* 指针。如果...
std::unique_ptr<int> ptr(new int); // 当离开这个作用域时,ptr会自动释放内存 } 另一个智能指针是std::shared_ptr,它允许多个智能指针指向同一个对象。当最后一个std::shared_ptr离开作用域时,它会自动释放所管理的内存。 代码如下: 代码语言:c++ ...
ii. 从unique_ptr到shared_ptr iii. 从裸指针到shared_ptr c)异步调用处理 i. 错误做法是,向异步处理对象塞入this,但this会析构,异步处理会core ii. 正确做法,先继承enable_shared_from_this, 再向异步处理对象塞入shared_from_this() iii. 总之,不能让有机会直接取this,一定要受控于控制块 ...
在任何时候,只能有一个unique_ptr指向一个对象。当这个unique_ptr被销毁时,它所指向的对象也会被删除。 weak_ptr:这是一种不控制对象生命周期的智能指针。它是为了解决shared_ptr可能导致的循环引用问题而设计的。 2. 基于范围的for循环 (Range-based for loop):C++11引入了一种新的for循环语法,使得遍历数据...