// 避免直接使用new - 反例:直接使用new而不通过std::make_unique std::unique_ptr<int> ptr(new int(42)); // 不推荐 // 解释:尽管这样可以工作,但推荐使用std::make_unique,它提供更好的异常安全性和代码清晰度。 // 资源管理 - 反例:多个unique_ptr指向同一资源 int* rawPtr = new int(42); ...
std::unique_ptr使用 1 引言 std::unique_ptr是c++11起引入的智能指针,为什么必须要在c++11起才有该特性,主要还是c++11增加了move语义,否则无法对对象的所有权进行传递。 2 示例代码 #include<memory>#include<iostream>#include<utility>classFoo{public:Foo()=default;Foo(inta):_a(a){}~Foo(){}intget_a...
std::unique_ptr和std::shared_ptr可以通过以下方式使用:
std::unique_ptr与std::move不解之缘 std::unique_ptr无法被复制,但可以使用移动构造将std::unique_ptr对象持有的堆内存转移给另外一个对象,简单代码如下: std::unique_ptr<int>sp(std::make_unique<int>(12345));std::unique_ptr<int>sp1(std::move(sp)); std::move将sp持有的堆内存转移给sp1后,sp...
定义了一个MyClass类,然后在main函数中使用std::make_unique来创建一个该类的对象。std::unique_ptr负责管理这个新创建对象的生命周期,当std::unique_ptr被销毁时,它也会自动销毁所管理的对象。 4.0 std::make_unique 相关知识点包括 智能指针(Smart Pointers):C++中的智能指针是模板类,可以帮助程序员管理动态分...
构造unique_ptr 的时候第二个参数是一个自定义删除器,如果不填写自定义删除器,就会使用默认的删除器,一般情况下我们用默认的删除器就可以了,如果有需要也可以写自定义的删除器。注意 C++11 中构造 std::unique_ptr 不能像 std::shared_ptr 那样(通过 make...
当需要一个智能指针时,std::unique_ptr通常是最合适的。默认情况下,std::unique_ptr大小等同于原始指针,而且对于大多数操作(包括取消引用),他们执行的指令完全相同。甚至可以在内存和时间都比较紧张的情况下使用它。如果原始指针够小够快,那么std::unique_ptr一样可以。
答案是设计如此!哈哈,说了句废话。具体来说,删除器不是类型的一部分,使得你可以对同一种类型的shared_ptr,使用不同的自定义删除器 automy_deleter = [](Impl * p) {...};std::shared_ptr<Impl>w1(new Impl, my_deleter);std::shared_ptr<Impl>w2(new Impl);// default_deleterw1 = w2;// It'...
包含头文件:首先需要包含头文件<memory>,以便使用std::unique_ptr。 分配内存:使用std::make_unique函数来分配内存并创建对象数组。std::make_unique是C++14引入的函数模板,用于创建std::unique_ptr对象。 分配内存:使用std::make_unique函数来分配内存并创建对象数组。std::make_unique是C++14引入的函数模板,用于创...
在接下来的章节中,我们会深入解析 C++ 的智能指针类型,包括std::unique_ptr、std::shared_ptr和std::weak_ptr,并介绍它们在不同场景中的应用,以及如何使用它们进行更高效的内存管理。 1.2 智能指针的类型 在C++中,有几种类型的智能指针,包括std::unique_ptr、std::shared_ptr和std::weak_ptr。以下是这三种智...