添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

make_unique的实现

std::make_shared 是C++11的一部分,但是 std::make_unique 很可惜不是。它是在C++14里加入标准库的,但我们可以自己实现 make_unique 方法。

// 支持普通指针
template<class T,class... Args> inline
typename enable_if<!is_array<T>::value,unique_ptr<T>>::type
make_unique(Args&&... args){
    return unique_ptr<T>(new T(std::forward<Args>(args)...));
// 支持动态数组
template<class T> inline
typename enable_if<is_array<T>::value && extent<T>::value == 0,unique_ptr<T>>::type
make_unique(size_t size){
    typedef typename remove_extent<T>::type U;
    return unique_ptr<T>(new U[size]());
// 过滤掉定长数组的情况
template<class T,class... Args>
typename enable_if<extent<T>::value != 0,void>::type
make_unique(Args&&...) = delete;

enable_if的作用

// Primary template.
/// Define a member typedef @c type only if a boolean constant i
make_unique的实现std::make_shared是C++11的一部分,但是std::make_unique很可惜不是。它是在C++14里加入标准库的,但我们可以自己实现make_unique方法。// 支持普通指针template<class T,class... Args> inlinetypename enable_if<!is_array<T>::value,unique_pt
C++ 智能 指针 shared_ptr分析 shared_ptr是c++ 智能 指针 中适用场景多,功能实现较多的 智能 指针 。它采取引用计数的方法来实现释放 指针 所指向的资源。下面是我代码实现的基本功能。 实例代码: template class sharedptr public: sharedptr(T* ptr) :_ptr(ptr) , _refCount(new int(1)) sharedptr(sharedptr& sp) :_ptr(sp._ptr) , _refCount(sp._refCount)
关于 make_unique 的构造及使用例程,MSDN的讲解非常详细 (https://msdn.microsoft.com/zh-cn/library/dn439780.aspx) 使用过程中,主要有这么几个关键点: 1. make_unique 同unique_ptr 、auto_ptr等一样,都是smart pointer,可以取代new 并且无需 delete pointer,有助于代码管理。 2. make_unique 创建并返回 unique_ptr至指定类型的对象,这一点从其...
在C++中,动态内存的管理是通过一对运算符来完成的:new,在动态内存中为对象分配空间并返回一个指向该对象的 指针 ,可以选择对对象进行初始化;delete,接受一个动态对象的 指针 ,销毁该对象,并释放与之关联的内存。 动态内存的使用很容易出问题,因为确保在正确的时间释放内存是极其困难的。有时会忘记释放内存,在这种情况下会产生内存泄露;有时在尚有 指针 引用内存的情况下就释放了它,在这种情况下就会产生引用...
<1>关于 make_unique 的几个关键点: 1. make_unique 同 unique_ptr 、auto_ptr 等一样,都是 smart pointer,可以取代new 并且无需 delete pointer,有助于代码管理。 2. make_unique 创建并返回 unique_ptr 至指定类型的对象,这一点从其构造函数能看出来。 make_unique 相较于unique_ptr 则更加安全。 3. 编译器不同, make_unique 要求更新。(std::make_share
//方法2 auto ptr2 = std:: make_unique <std::array<int, 5>>(std::array<int, 5>{1, 2, 3, 4, 5}); 但还是建议使用vector来表示数组,如下: //方法3 shared_ptr<vecto
关于 make_unique 的构造及使用例程,MSDN的讲解非常详细 (https://msdn.microsoft.com/zh-cn/library/dn439780.aspx ) 使用过程中,我的理解主要有这么几个关键点: 1. make_unique 同 unique_ptr 、auto_ptr 等一样,都是 smart pointer,可以取代new 并且无需 delete
unique是 c++标准模板库STL中十分实用的函数之一,使用此函数需要#include &lt;algorithm&gt;头文件 该函数的作用是“去除”容器或者数组中相邻元素的重复出现的元素 (1) 这里的去除并非真正意义的erase,而是将重复的元素放到容器的末尾,返回值是去重之后的尾地址。  (2) unique针对的是相邻元素,所以对于顺序顺序错乱的数组成员,或者容器成员,需要先进行排...
` make_unique `和` make_shared `都是C++11中引入的模板函数,用于创建动态分配的 智能 指针 对象。它们的区别在于: ` make_unique `用于创建一个`unique_ptr` 智能 指针 对象,该对象独占所指向的对象,不能共享。` make_unique `函数使用起来比直接用`new`操作符分配内存然后传递给`unique_ptr`更加安全,能够避免内存泄漏等问题。 ` make_shared `用于创建一个`shared_ptr` 智能 指针 对象,该对象可被多个 指针 共享。` make_shared `函数会在内存中分配一个控制块,同时在控制块中存储指向所分配对象的 指针 ,以及引用计数等信息。因此,使用` make_shared `函数创建 智能 指针 对象可以减少内存分配次数,提高程序性能。 需要注意的是,` make_shared `需要将所分配的对象直接传递给函数,而不能通过构造函数的方式传递参数。如果需要传递参数,可以使用`std::shared_ptr`的构造函数来创建 智能 指针 对象。