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;

}

相关推荐
李匠2024几秒前
C++学习之QT综合项目二经典翻金币小游戏及打包
c++·学习
茨球是只猫34 分钟前
C++ 编程基础:注释、字符串、输入输出、日期处理、修饰符
开发语言·c++·学习·c
dowhileprogramming1 小时前
Python Flask 在网页应用程序中处理错误和异常
开发语言·python·flask
编程hero1 小时前
[Java]使用java进行JDBC编程
android·java·开发语言
froginwe111 小时前
R 基础运算
开发语言
醉城夜风~1 小时前
[数据结构]堆详解
开发语言·数据结构
刃神太酷啦2 小时前
数据结构(蓝桥杯常考点)
数据结构·c++·蓝桥杯c++组
17´2 小时前
Qt从入门到入土(八) -打包Qt程序
开发语言·c++·qt
AI+程序员在路上2 小时前
QT显示网页控件QAxWidget、QWebEngineView及区别
开发语言·qt
南玖yy2 小时前
C语言柔性数组深度解析:动态内存管理的艺术
c语言·开发语言·柔性数组