一、unique_ptr类 头文件:#include<memory> 智能指针,是一个模板。创建智能指针时,必须提供指针所指的类型 与shared_ptr的不同之处: shared_ptr所指向的对象可以有多个其他shared_ptr智能指针 而unique_ptr所指向的对象只能有一个unique_ptr指针,也就是自己。当unique_ptr被销毁时,它所指向的对象也被销毁 二、un...
虽然我们不能拷贝赋值unique_ptr,但是可以通过调用release或者set将指针的所有权从一个(非const)unique_ptr转移给一个unique: #include <iostream> #include <memory> using namespace std; class TEST { public: TEST(const string & name) :_name(name) {cout<<"TEST:"<<_name<<endl;} TEST(const TEST ...
5.4 unique_ptr 源码 #include<cstdio>#include<iostream>#include<vector>#include<utility>// #include <concepts>template<classT>structDefaultDeleter{// 默认使用 delete 释放内存voidoperator()(T*p)const{delete
#include <iostream> #include <memory> using namespace std; /* 1.unique_ptr则“独占”所指对象。 2.unique定义在memory头文件中。 3.没有类似make_shared的标准库函数返回一个unique_ptr,错误,C++14中已经有make_unique 4.当我们定义一个unique_ptr的时候,需要将其绑定到一个new返回的指针上。 5.unique...
#include<memory>std::unique_ptr<int> uniquePtr = std::make_unique<int>(42); shared_ptr: std::shared_ptr允许多个智能指针共享对同一对象的所有权,通过引用计数来跟踪对象的共享情况。 当最后一个拥有shared_ptr的实例被销毁时,关联的对象会被释放。
头文件#include <memory> unique_ptr特性 (属性为对象, 而不是指针, 管理指针) (1).基于排他所有权模式:两个指针不能指向同一个资源 无法进行左值unique_ptr复制构造,也无法进行左值复制赋值操作,但允许临时右值赋值构造和赋值 保存指向某个对象的指针,当它本身离开作用域时会自动释放它指向的对象。
unique_ptr被设计成为一个零额外开销的智能指针,使用它,应该相比你手工写new和delete没有额外开销,不管是时间还是空间上。 关于如何销毁对象,对unique_ptr来讲,默认作为一个静态信息存放在模板的参数里。在使用静态删除器时,它的动态信息,每对象的空间开销,则只有一个指针的大小。 #include <iostream> int main()...
unique_ptr<T>不允许复制构造,而是支持移动语义。然而,我可以unique_ptr<T>从函数返回一个并将返回的值赋给变量。 #include <iostream>#include <memory>using namespace std;unique_ptr<int> foo(){ unique_ptr<int> p( new int(10) ); return p; // 1 //return move( p ); // 2}int main()...
#include#include"UniquePtr.h"// 假设UniquePtr类定义在UniquePtr.h中struct MyClass { MyClass(int value) : value_(value) {} ~MyClass() { std::cout << "Destroying MyClass with value " << value_ << std::endl; } int value_;};int main() { UniquePtr ptr1(new MyClass(10)); //...
#include<memory>voidmanageResource(std::unique_ptr<int>ptr){// 使用资源}// ptr在此处自动销毁,资源被释放intmain(){autoptr=std::make_unique<int>(42);// 创建并初始化unique_ptrmanageResource(std::move(ptr));// 移动所有权到函数内// ptr现在为空,资源已在manageResource内部被释放return0;} ...