如何正确返回unique_ptr类型的nullptr? std::unique_ptr是 C++11 引入的一种智能指针,用于管理动态分配的对象,并确保在指针生命周期结束时自动删除所指向的对象。std::unique_ptr提供了独占所有权的语义,即同一时间只能有一个unique_ptr指向一个对象。 基础概念 ...
1.1 创建unique_ptr指针的方法如下: std::unique_prt<int> unique_ptr_p1;//创建了一个没有指向任何内存的unique_ptr, 为nullptr std::unique_ptr<int> unique_ptr_p2(new int);//创建的指针,指向的内存没有初始化 std::unique_ptr<int> unique_ptr_p3(new int(0));//创建的指针,初始化为0 std::...
当执行std::move(ptr1)时,ptr1中的原始指针会被复制到临时的右值引用对象中,然后ptr2的构造函数将从这个临时对象中获取指针,并将ptr1中的指针设置为nullptr。当ptr2析构时,它会删除它所拥有的对象。 6.0 std::shared_ptr和std::weak_ptr std::shared_ptr是一种共享所有权的智能指针,多个std::shared_ptr可...
{deleteptr; ptr=nullptr; }intmain() {//使用usingusingcus_del =void(*)(string*); unique_ptr<string, cus_del> uni_ptr(newstring("hello"),customDeleter);//使用 lambdaauto my_del = [](string* ptr)->{deleteptr; ptr=nullptr; } unique_ptr<string, decltype(my_del)> uni_ptr(newstring...
u_s2=nullptr;//显式销毁所指对象,同时智能指针变为空指针。与u_s2.reset()等价 2.auto_ptr auto_ptr 同样是 STL 智能指针家族的成员之一,由 C++98 引入,定义在头文件<memory>。其功能和用法类似于 unique_ptr,由 new expression 获得对象,在 auto_ptr 对象销毁时,他所管理的对象也会自动被 delete 掉。
release 函数用于释放 UniquePtr 对资源的所有权,返回原始指针,并将内部指针设为 nullptr。这样做可以手动管理资源,但通常不推荐这样做,因为它破坏了 UniquePtr 的自动管理特性。template<typename T>void UniquePtr<T>::release() { T* temp = ptr_; // 保存原始指针 ptr_ = nullptr; // 将内部...
p1.reset(nullptr);//同上 1. 2. unique_ptr<string>p1(newstring("Hello")); unique_ptr<string>p2(newstring("World")); p1.reset(p2.release());//p2置空之后,然后p1也置空,然后p1来接手p2所指向的内存 1. 2. 3. 4. 五、重置unique_ptr类删除器 ...
std::unique_ptr<int>u2 (nullptr); std::unique_ptr<int> u3 (newint); std::unique_ptr<int> u4 (newint, d); std::unique_ptr<int> u5 (newint, std::default_delete<int>()); std::unique_ptr<int>u6 (std::move(u5)); std::unique_ptr<int>u7 (std::move(u6)); ...
// 增加引用计数std::cout<<ptr1.use_count()<<std::endl;// 输出: 2// 通过弱引用指针weak_ptr解决循环引用问题std::weak_ptr<int>weakPtr=ptr1;// 使用lock()函数获取一个shared_ptrstd::shared_ptr<int>ptr3=weakPtr.lock();if(ptr3!=nullptr){// 成功获取shared_ptr}// 减少引用计数ptr1....
~unique_ptr() { auto& __ptr = std::get<0>(_M_t); if (__ptr != nullptr) get_deleter()(__ptr); __ptr = pointer(); } 在析构时,释放持有的指针。3. 符号重载= 重载 unique_ptr& operator=(unique_ptr&& __u) noexcept { reset(__u.release()); get_deleter() = std::forward...