可以为 std::unique_ptr 提供自定义删除器,用于执行特定的资源释放操作。 #include <memory> #include <iostream> void customDeleter(int* p) { std::cout << "Custom deleter called" << std::endl; delete p; } void example() { // 使用自定义删除器创建 unique_ptr std::unique_ptr<int, decltyp...
此时使用std::unique_ptr来管理动态内存,只要std::unique_ptr指针创建成功,其析构函数都会被调用,确保动态资源被释放。 #include<memory>#include<iostream>usingnamespacestd;classFunc{};intmain(){unique_ptr<Func>upFunc(newFunc);//...return0; } 容器内保存指针示例: std::vector<std::unique_ptr<int>...
std::unique_ptr是一种独占的语义,即只允许一个智能指针引用裸指针,这区别于std::shared_ptr允许多个shared_ptr引用同一个裸指针,它没有引用计数,它的性能比shared_ptr会高一点。 在用法上std::unique_ptr和std::shared_ptr是类似的,主要的不同是std::unique_ptr之间的赋值需要通过std::move实现。 在code2 ...
std::unique_ptr允许自定义删除器,用于在对象销毁时执行特定的清理操作: structCustomDeleter{voidoperator()(int*ptr)const{std::cout<<"Deleting int pointer"<<std::endl;deleteptr;}};std::unique_ptr<int,CustomDeleter>ptr(newint(10),CustomDeleter()); 与原始指针的区别 与原始指针相比,std::unique_p...
std::unique_ptr的一个常见用法是在对象继承谱系中作为工厂函数的返回型别。这种继承谱系的工厂函数通常会在堆上分配一个对象并且返回一个指涉到它的指针,并当不在需要该对象时,由调用者负责删除之。 三、示例(以下代码需要c++14支持) #ifndefUNIQUEPTRDEMO_H#defineUNIQUEPTRDEMO_H#include<iostream>#include<memo...
std::unique_ptr是一种独占所有权的智能指针,意味着同一时间只能有一个std::unique_ptr拥有对一个对象的控制权。 当std::unique_ptr被销毁时(例如,离开作用域或被显式删除),它所指向的对象也会被删除。 std::unique_ptr不能被复制,但可以被移动,这意味着所有权可以转移,但不能共享。
// 1.创建一个指向整型对象的unique_ptr,默认使用delete运算符释放资源 std::unique_ptr<int> uptr(new int(10)); // 2.C++ 14 使用 std::make_unique std::unique_ptr<int> uptr = std::make_unique<int>(10); std::unique_ptr<MyClass> uptr = std::make_unique<MyClass>(); ...
和std::auto_ptr一样,std::unique_ptr也是一种智能指针,它也是通过指针的方式来管理对象资源,并且在 unique_ptr 的生命期结束后释放该资源。 unique_ptr 持有对对象的独有权 —— 两个 unique_ptr 不能指向一个对象,...
原先使用普通指针时,分配内存后需手动释放,以防内存泄漏。但使用std::unique_ptr时,超出范围自动调用delete,无需手动释放。这是其优势,减少内存泄漏风险。在C++11中,直接使用构造函数创建std::unique_ptr是常见做法,但随着std::make_unique的引入,这种方法不再推荐,因为它可能导致异常不安全。std:...