}unique_ptr<int>cl1(intp){returnunique_ptr<int>(newint(p)); }unique_ptr<int>cl2(intp){unique_ptr<int>rt(newint(p));returnrt; }voidfl1(unique_ptr<int> p){ *p =100; }intmain(){//test1 不可以拷贝和赋值/* unique_ptr<int> p1(new int(11)); //unique_ptr<int> p2(p1);//N...
};template<typenameT,typename... Args>automake_Unique(Args &&...args){returnUnique_ptr<T>{newT(std::forward(args)...)}; }#include<vector>intmain(){ Unique_ptr<std::vector<int>> ptr = make_Unique<std::vector<int>>();return0; }...
vector随机存取效率高,但是在vector插入元素,需要移动的数目多,效率低下。 注:vector动态增加大小时是以原大小的两倍另外配置一块较大的空间,然后将原内容拷贝过来,然后才开始在原内容之后构造新元素,并释放原空间。因此,对vector空间重新配置,指向原vector的所有迭代器就都失效了。 2) Map关联容器,以键值对的形式进...
1)unique_ptr不允许其他的智能指针共享其内部的指针,不允许通过赋值将一个unique_ptr赋值给另外一个 unique_ptr; 2)unique_ptr不允许复制,但可以通过函数返回给其他的unique_ptr,还可以通过std::move来转移到其他的unique_ptr,它本身就不再拥有原来指针的所有权; 3)如果希望只有一个智能指针管理资源或管理数组就用...
1、auto_ptr (无论什么情况下都不要使用,C++98标准,到了C++11标注引入了shared_ptr,unique_ptr,,weak_ptr) 2、shared_ptr shared_ptr和auto_ptr最大的区别就是,shared_ptr解决了指针间共享对象所有权的问题,也就是auto_ptr中的赋值的奇怪问题。所以满足了容器的要求,可以用于容器中。而auto_ptr显然禁止共享对...
在C语言中,内存管理相对较为直接和底层。程序员需要手动分配(如使用malloc)和释放(如使用free)内存,这要求程序员对内存管理有深入的理解,否则可能导致内存泄漏或野指针等问题。C++虽然也支持手动内存管理,但更推荐使用智能指针(如std::unique_ptr、std::shared_ptr)和容器类(如std::vector、std::list)等...
shared_ptr允许多个指针指向同一个对象;unique_ptr则“独占”所指向的对象。标准库还定义了一个名为weak_ptr的伴随类,它是一种弱引用,指向shared_ptr所管理的对象。这三种类型都定义在memory头文件中。 make_shared的标准库函数在动态内存中分配一个对象并初始化它,返回指向此对象的shared_ptr。与智能指针一样,ma...
C++ 11 中的智能指针有:shared_ptr, unique_ptr 和 weak_ptr。 shared_ptr 的引用计数是存放在堆上的,多个 shared_ptr 的对象的引用计数都指向同一个堆地址。 unique_ptr 中拷贝构造函数和赋值操作符都声明为delete或private。 优先使用 make_shared 和 make_unique 的原因是为了避免内存泄露。参考C++11 中的...
template <> class Blob<int> {typedef typename std::vector<int>::size_type size_type; Blob(); Blob(std::initializer_list<int> i1); int& operator[](size_type i);private:std::shared_ptr<std::vector<int>> data; void check(size_type i, const std::string &msg) const;...
vector<unique_ptr<int>>vec; unique_ptr<int> uptr(newint(10)); vec.push_back(std::move(uptr));return0; } 4.管理动态数组 intmain() { unique_ptr<int[]> uptr(newint[5]{1,2,3,4,5}); uptr[0] =100; cout<< uptr[0] <<endl;return0; ...