这两天在看unique_ptr的时候无意之间发现一个神奇的操作:unique_ptr内部维护另一个friend unique_ptr,鉴于本人拙劣的cpp水平,一下子没看懂,其实引入这个东西的目的很简单,可以用一个派生类指针去移动初始化一个基类指针(特别感谢泺佬的指点) 如上图,unique_ptr内部维护的只有一个_Compressed_pair对象,这一点可以参...
1.1 unique_ptr 参考:https://zh.cppreference.com/w/cpp/memory/unique_ptr std::unique_ptr是通过指针占有并管理另一对象,并在unique_ptr离开作用域时释放该对象的智能指针 在下列两者之一发生时用关联的删除器释放对象: 销毁了管理的unique_ptr对象 通过operator=或reset()赋值另一指针给管理的unique_ptr对象。
1.1 unique_ptr 参考:https://zh.cppreference.com/w/cpp/memory/unique_ptr std::unique_ptr是通过指针占有并管理另一对象,并在unique_ptr离开作用域时释放该对象的智能指针 在下列两者之一发生时用关联的删除器释放对象: 销毁了管理的unique_ptr对象 通过operator=或reset()赋值另一指针给管理的unique_ptr对象。
shared_ptr与weak_ptr示例 代码语言:cpp 复制 #include<memory>classNode{public:std::shared_ptr<Node>next;std::weak_ptr<Node>prev;// ...其他成员和方法};voidcreateChain(){autonode1=std::make_shared<Node>();autonode2=std::make_shared<Node>();node1->next=node2;node2->prev=node1;// 使...
unique_ptr.cpp:24: [main] done 第二点就有点麻烦,需要借用 C++11 的其他特性才能实现,最重要的就是右值引用和 std::move 。 首先他需要禁止拷贝构造函数。 例如 void test2_1(unique_ptr<A> x) { } void test1() { unique_ptr<A> ptr(new A()); ...
/* main.cpp 文件 */ #include <iostream> #include <string> //#include"shared_ptr.h" #include "unique_ptr.h" #include"DebugDelete.h" #include <assert.h> struct Foo { Foo() { std::cout << "Foo()\n"; } ~Foo() { std::cout << "~Foo()\n"; } Foo(const Foo&) { std::...
代码语言:cpp 复制 #include <iostream> #include <memory> int main() { std::unique_ptr<int> ptr = std::make_unique<int>(42); std::cout << "Value: " << *ptr << std::endl; return 0; } 使用std::move和std::forward:std::unique_ptr支持std::move和std::forward,允许你将unique_ptr...
1. auto_ptr(c++98的方案,cpp11已经抛弃) 采用所有权模式。 auto_ptr<string>p1(newstring("Ireigned lonelyasa cloud.”));auto_ptr<string>p2;p2=p1;//auto_ptr不会报错. 此时不会报错,p2剥夺了p1的所有权,但是当程序运行时访问p1将会报错。所以auto_ptr的缺点是:存在潜在的内存崩溃问题!
1:template <class _Ty, class _Dx = default_delete<_Ty>> class unique_ptr;是RAII的一种典型...
cat.cpp #include"cat.h"Cat::Cat(string name):name(name){cout<<"constructor of cat "<<name<<endl;}Cat::~Cat(){cout<<"Deconstructor of cat "<<name<<endl;} #include<iostream>#include<memory>#include"cat.h"usingnamespacestd;intmain(){// 栈上分配Catc1("ok");c1.cat_info();// ...