区别1:分配除的指针,前者是不能赋值,只能move,后者可以赋值
区别2:前者使用智能指针数组,后者不行(因为后者分配出来的指针具有单一性)
#include
#include
class A
{
public:
A() {
std::cout << “A” << std::endl;
}
~A() {std::cout << "~A()" << std::endl;
}
};
int main()
{
//std::unique_ptr<char[]>ptr = std::make_unique<char[]>(std::move(100));
//等价写法
//std::unique_ptr<A[]>ptr1(new A[10],std::default_delete<A[]>());
//std::unique_ptr<A[]>ptr1(new A[10]);(权威规定的默认std::default_delete删除器 )
//可能是为了单一性
//std::shared_ptrptr = std::make_shared(100);
//注意智能指针数组,一定要释放函数
//使用智能数组时,一定要添加接口
//不写的,直接程序崩溃
//std::shared_ptr<A[]>ptr(new A[10]);
//使用列子
//这样也可以,我也不知道
//std::shared_ptr<A>ptr(new A[10], std::default_delete<A[]>());
//std::shared_ptr<A[]>ptr(new A[10],std::default_delete<A[]>());
//std::shared_ptr<A[]>ptr(new A[10], [](const A* p) {delete[]p;});
//程序直接报错
//std::shared_ptr<A[]>ptr(new A[10], [](const A* p) {delete p;});
//删除整个
std::shared_ptr<A[]>ptr(new A[10], [](const A* p) {delete[]p; p = nullptr;});
}