unique_ptr<int> ptr3; ptr1 = ptr3; // 报错,编译器避免了ptr1不再指向有效数据的问题。 另外unique_ptr 还有更聪明的地方:当程序试图将一个 unique_ptr 赋值给另一个时,如果源 unique_ptr 是个临时右值,编译器允许这么做;如果源 unique_ptr 将存在一段时间,编译器禁止这么做,比如 unique_ptr<string> ...
unique_ptr<int> uptr1 = make_unique<int>();//新建第一个对象//unique_ptr<int> uptr2 = uptr1;//错误,唯一指向,不能赋值给其他指针unique_ptr<int> uptr2 = move(uptr1);//将指针uptr1指向的内存转移给uptr2,uptr1变为空unique_ptr<int> uptr3= make_unique<int>();//新建第二个对象int* ...
unique_ptr是C++11中引入的智能指针之一,它用于管理动态分配的对象,可以确保在不再需要时自动释放内存,避免内存泄漏。unique_ptr使用独占所有权的方式管理资源,即同一时间只能有一个unique_ptr拥有指向该对象的指针。 构造unique_ptr<int>和int对象时,可以通过以下方式实现: 构造unique_ptr<int>对象: unique_ptr<int...
std::unique_ptr<int> unique_ptr_p2(new int);//创建的指针,指向的内存没有初始化 std::unique_ptr<int> unique_ptr_p3(new int(0));//创建的指针,初始化为0 std::unique_ptr<int> unique_ptr_p4(new int{});//创建的指针,初始化为0 std::unique_ptr<int> unique_ptr_p5(new int{0});//...
unique_ptr的基本操作有: //智能指针的创建 unique_ptr<int> u_i; //创建空智能指针 u_i.reset(new int(3)); //绑定动态对象 unique_ptr<int> u_i2(new int(4));//创建时指定动态对象 unique_ptr<T,D> u(d); //创建空 unique_ptr,执行类型为 T 的对象,用类型为 D 的对象 d 来替代默认...
C++ 标准模板库 STL(Standard Template Library) 一共给我们提供了四种智能指针:auto_ptr、unique_ptr、shared_ptr 和 weak_ptr,其中 auto_ptr 是 C++98 提出的,C++11 已将其摒弃,并提出了 unique_ptr 替代 auto_ptr。虽然 auto_ptr 已被摒弃,但在实际项目中仍可使用,但建议使用更加安全的 unique_ptr,后文...
unique_ptr<int>p3=newint(42);//错误 1. 2. 3. 三、unique_ptr之间不存在拷贝与赋值 原因:因为unique_ptr所指向的对象只能有一个unique_ptr指针,也就是一个引用计数。因此unique_ptr不支持普通的拷贝和赋值操作 unique_ptr<string>p1(newstring("HelloWorld")); ...
创建一个 std::unique_ptr,并指定一个自定义的删除器 customDeleter,用于释放资源。void customDeleter(int* ptr) {std::cout << "Deleting memory at address: " << ptr << std::endl;delete ptr;}int main() {std::unique_ptr<int, decltype(&customDeleter)> ptr(new int(42), customDeleter);...
一个unique_ptr “拥有” 它所指向的对象。与 shared_ptr 不同,某个时刻只能有一个 unique_ptr 指向一个给定对象,当 unique_ptr 被...