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;

}

相关推荐
看到代码就头晕4 分钟前
python学习 day5
开发语言·python·学习
乌托邦的逃亡者7 分钟前
使用JProfiler进行Java应用性能分析
java·开发语言·性能优化
永日4567010 分钟前
java小结(一)
java·开发语言
孞㐑¥17 分钟前
Linux之Ext系列文件系统(含动静态库)
linux·开发语言·c++·经验分享·笔记
幽蓝计划28 分钟前
鸿蒙仓颉开发语言实战教程:实现商城应用详情页
开发语言·华为·harmonyos
Pocker_Spades_A29 分钟前
Python刷题:神奇的函数
开发语言·python
Your易元1 小时前
设计模式-备忘录模式
java·开发语言·spring·设计模式
零叹2 小时前
篇章二 需求分析(一)
java·开发语言·mq·生产者消费者模型·brokerserver
虾球xz2 小时前
游戏引擎学习第307天:排序组可视化
c++·学习·算法·游戏引擎
虾球xz2 小时前
游戏引擎学习第306天:图结构排序的调试
c++·学习·算法·游戏引擎