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;

}

相关推荐
旖-旎1 分钟前
《LeetCode 417 太平洋大西洋水流问题 FloodFill DFS 解法》
c++·算法·深度优先·力扣·floodfill
dadaobusi5 分钟前
RISC-V 虚拟化:虚拟机TLB处理
java·开发语言
夏幻灵6 分钟前
深度解析 JavaScript 异步编程:从回调地狱到 Promise 的重构
开发语言·javascript·重构
鱼子星_9 分钟前
C++从零开始系列篇(二):C++入门——函数重载,引用,inline与nullptr
开发语言·c++·笔记
程序猿乐锅15 分钟前
【 苍穹外卖day03 | 菜品管理 】
java·开发语言·数据库·mysql
派大鑫wink16 分钟前
Java 高级编程技巧(生产级实用,覆盖性能、并发、设计、JVM、语法、避坑)
开发语言·python
JSON_L16 分钟前
PHP实现大文件分片上传
开发语言·php
凤山老林18 分钟前
JDK 11 升级至 JDK 17
java·开发语言·jdk17·jdk升级·jdk11
指令集梦境23 分钟前
图解:单调栈算法模板(Java语言)
java·开发语言·算法
小灰灰搞电子31 分钟前
C++ boost::circular_buffer 详解:原理、用法与实战
开发语言·c++·boost