日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

std::make_unique和 std::make_shared区别

發布時間:2025/3/11 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 std::make_unique和 std::make_shared区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

區別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;});

}

總結

以上是生活随笔為你收集整理的std::make_unique和 std::make_shared区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。