unique_ptr<string> pointer(new string("123456")); unique_ptr<string> pointer2(new string("888888")); pointer = pointer2; // 非法, 禁止左值赋值操作 unique_ptr<string> pointer3(pointer2); // 禁止左值赋值构造 unique_ptr<string
ptr1 = ptr3; // 报错,编译器避免了ptr1不再指向有效数据的问题。 另外unique_ptr 还有更聪明的地方:当程序试图将一个 unique_ptr 赋值给另一个时,如果源 unique_ptr 是个临时右值,编译器允许这么做;如果源 unique_ptr 将存在一段时间,编译器禁止这么做,比如 unique_ptr<string> pu1(new string("hello ...
#include <iostream>#include<memory>usingnamespacestd;voidcustomDeleter(string*ptr) {deleteptr; ptr=nullptr; }intmain() {//使用usingusingcus_del =void(*)(string*); unique_ptr<string, cus_del> uni_ptr(newstring("hello"),customDeleter);//使用 lambdaauto my_del = [](string* ptr)->{del...
只有指向动态分配的对象的指针才能交给 shared_ptr 对象托管。将指向普通局部变量、全局变量的指针交给 shared_ptr 托管,编译时不会有问题,但程序运行时会出错,因为不能析构一个并没有指向动态分配的内存空间的指针。 #include <iostream> #include <memory> #include <string> using namespace std; void fun() ...
将当前的unique_ptr指针所指的内存置为空,并且对这块内存的所有权消失 返回值:返回当前unique_ptr所指的内存 unique_ptr<string>p1(newstring("Hello")); unique_ptr<string>p2(p1.release());//p1将自己所指的内存空间置空,并且返回该内存空间。之后对该内存空间的操作权消失,从而p2得到该内存的权限 ...
unique_ptr<string> upstr3(new string("hello world")); //将upstr3的内置指针转移给upstr2 // upstr2放弃原来的内置指针,指向upstr3返回的内置指针。 upstr2.reset(upstr3.release()); } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ...
unique_ptr实现独占式拥有或严格拥有概念,保证同一时间内只有一个智能指针可以指向该对象。它对于避免资源泄露(例如“以new创建对象后因为发生异常而忘记调用delete”)特别有用。 采用所有权模式,还是上面那个例子 unique_ptr<string>p3(newstring("auto"));unique_ptr<string>p4; ...
将当前的unique_ptr指针所指的内存置为空,并且对这块内存的所有权消失 返回值:返回当前unique_ptr所指的内存 代码语言:javascript 代码运行次数:0 运行 AI代码解释 unique_ptr<string>p1(newstring("Hello"));unique_ptr<string>p2(p1.release());//p1将自己所指的内存空间置空,并且返回该内存空间。之后对该内...
string str; }; int main() { unique_ptr<Object> uPtr1{new Object("Object1")}; cout<<uPtr1.get()<<endl; unique_ptr<Object> uPtr2{move(uPtr1)}; cout<<uPtr1.get()<<endl; cout<<uPtr2.get()<<endl; { unique_ptr<Object> uLocalPtr{new Object("Local Object")}; ...
在实际使用中,unique_ptr 提供了与普通指针类似的访问方式,通过重载的 "operator*" 和 "operator->" 访问管理的对象。此外,unique_ptr 支持 "delete" 和 "array delete",对于特定的数据结构如 std::array、std::vector 和 std::string,使用 unique_ptr 可以更方便地管理资源。为了简化创建 ...