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的作用
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 <algorithm>头文件
该函数的作用是“去除”容器或者数组中相邻元素的重复出现的元素
(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`的构造函数来创建
智能
指针
对象。