#include<iostream>#include<memory>classPerson{public:Person() { std::cout <<"create"<< std::endl; }virtual~Person() { std::cout <<"distory"<< std::endl; }public:voidsetFather(std::shared_ptr<Person>& father)noexcept{ m_father = father; }voidsetSon(std::shared_ptr<Person>& son)...
一个unique_ptr"拥有“他所指向的对象。与shared_ptr不同,某个时刻只能有一个unique_ptr指向一个给定的对象。当unique_ptr被销毁时,它所指向的对象也被销毁。uniptr_ptr表达的是一种独占的思想。 初始化 #include <iostream> #include <memory> using namespace std; //常规操作 int main(int argc, char *...
一个unique_ptr"拥有“他所指向的对象。与shared_ptr不同,某个时刻只能有一个unique_ptr指向一个给定的对象。当unique_ptr被销毁时,它所指向的对象也被销毁。uniptr_ptr表达的是一种独占的思想。 初始化 #include <iostream> #include <memory> using namespace std; //常规操作 int main(int argc, char *...
虽然unique_ptr之间不能拷贝与赋值。但是可以使用release和reset函数来将指针的所有权从一个(非const)unique_ptr转移给另一个unique release函数 将当前的unique_ptr指针所指的内存置为空,并且对这块内存的所有权消失 返回值:返回当前unique_ptr所指的内存 unique_ptr<string>p1(newstring("Hello")); unique_ptr<str...
#include<iostream>#include<memory>usingnamespacestd;/* 1.unique_ptr则“独占”所指对象。 2.unique定义在memory头文件中。 3.没有类似make_shared的标准库函数返回一个unique_ptr,错误,C++14中已经有make_unique 4.当我们定义一个unique_ptr的时候,需要将其绑定到一个new返回的指针上。 5.unique_ptr必须采用...
unique_ptr被设计成为一个零额外开销的智能指针,使用它,应该相比你手工写new和delete没有额外开销,不管是时间还是空间上。 关于如何销毁对象,对unique_ptr来讲,默认作为一个静态信息存放在模板的参数里。在使用静态删除器时,它的动态信息,每对象的空间开销,则只有一个指针的大小。 #include <iostream> int main()...
#include <string> #include <memory> #include <vector> #include void mytest() { std::shared_ptr<int> sp1(new int(22)); std::shared_ptr<int> sp2 = sp1; std::cout << "cout: " << sp2.use_count() << std::endl; // 打印引用计数 2 std::...
本文要讲的是C++11引入的智能指针之std::unique_ptr。 std::unique_ptr系C++11引入的智能指针,拥有资源的唯一所有权,头文件 #include <memory>。 unique_ptr指针指向的堆内存空间的引用计数为 1,如果unique_ptr 指针放弃对所指堆内存空间的所有权,那么该空间会被立即释放回收。
unique_ptr可以通过get()获取地址 unique_ptr实现了->与* 即可以通过->调用成员函数 可以通过* 调用解引用 unique_ptr创建 cat.h #ifndefCAT_H#defineCAT_H#include<string>#include<iostream>usingnamespacestd;classCat{public:Cat(string name);Cat()=default;~Cat();voidcat_info()const{cout<<"cat ino...
class unique_ptr { public: unique_ptr(); unique_ptr(nullptr_t Nptr); explicit unique_ptr(pointer Ptr); unique_ptr(pointer Ptr, typename conditional<is_reference<Del>::value, Del, typename add_reference<const Del>::type>::type Deleter); unique_ptr(pointer Ptr, typename remove_reference<Del...