c++智能指针

std::make_shared和std::make_unique都可以用于创建智能指针,但它们的使用场景和所有权模型不同。

std::make_shared通常用于创建共享所有权的对象。当有一个对象,并且希望多个智能指针可以共享对象的所有权时,可以使用std::make_shared。这样,当最后一个智能指针被销毁时,对象也会被销毁。

以下是一个使用std::make_shared创建共享所有权对象的示例:

#include

#include

class MyClass {

public:

MyClass(int value) : value_(value) {

std::cout << "MyClass constructed with value " << value_ << std::endl;

}

~MyClass() {

std::cout << "MyClass destructed with value " << value_ << std::endl;

}

private:

int value_;

};

int main() {

std::shared_ptr ptr1 = std::make_shared(10);

std::shared_ptr ptr2 = ptr1;

// 使用ptr1和ptr2...

return 0;

}

在这个例子中,创建了一个MyClass对象,并使用std::make_shared创建了两个共享所有权的智能指针ptr1和ptr2。当最后一个智能指针被销毁时,MyClass对象也会被销毁。

相比之下,std::make_unique用于创建具有独占所有权的对象。当有一个对象,并且希望只有一个智能指针可以拥有对象的所有权时,可以使用std::make_unique。这样,当最后一个智能指针被销毁时,对象也会被销毁。

以下是一个使用std::make_unique创建独占所有权对象的示例:

#include

#include

class MyClass {

public:

MyClass(int value) : value_(value) {

std::cout << "MyClass constructed with value " << value_ << std::endl;

}

~MyClass() {

std::cout << "MyClass destructed with value " << value_ << std::endl;

}

private:

int value_;

};

int main() {

std::unique_ptr ptr1 = std::make_unique(10);

// 使用ptr1...

return 0;

}

相关推荐
程序员龙一17 小时前
C++之lambda表达式使用解读
c++·lambda
AI视觉网奇17 小时前
yolo 获取异常样本 yolo 异常
开发语言·python·yolo
散峰而望17 小时前
C++入门(二) (算法竞赛)
开发语言·c++·算法·github
-指短琴长-17 小时前
ProtoBuf速成【基于C++讲解】
android·java·c++
沐知全栈开发17 小时前
CSS Float(浮动)详解
开发语言
Cx330❀17 小时前
《C++ 搜索二叉树》深入理解 C++ 搜索二叉树:特性、实现与应用
java·开发语言·数据结构·c++·算法·面试
阿猿收手吧!18 小时前
【C语言】localtime和localtime_r;strftime和strftime_l
linux·c语言·开发语言
不染尘.18 小时前
2025_11_5_刷题
开发语言·c++·vscode·算法·贪心算法·动态规划
不穿格子的程序员18 小时前
从零开始刷算法-栈-字符串解码
java·开发语言
你不是我我18 小时前
【Java 开发日记】设计模式了解吗,知道什么是饿汉式和懒汉式吗?
android·java·开发语言