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;

}

相关推荐
MC皮蛋侠客4 小时前
Google Test 单元测试指南
c++·单元测试·google test
方也_arkling5 小时前
【Java-Day08】static / final / 枚举
java·开发语言
艾莉丝努力练剑5 小时前
【Linux:文件】Ext系列文件系统进阶
linux·运维·服务器·c++·文件系统·文件io·ext
风吹夏回5 小时前
Python 全局异常处理:从“满屏 try-except”到优雅兜底
开发语言·python
Chengbei115 小时前
一站式源码安全检测工具、云安全 / APP / 小程序源码敏感信息递归多层目录扫描AK、JWT、手机号、身份证等敏感信息
java·开发语言·安全·web安全·网络安全·系统安全·安全架构
llz_1125 小时前
web-第一次课后作业
java·开发语言·idea
小熊Coding5 小时前
Python爬取当当网二手图书项目实战!
开发语言·爬虫·python·beautifulsoup·requests·二手图书
秋96 小时前
Java项目运行5天左右自动宕机:系统性定位与解决方案
java·开发语言·python
xiaoshuaishuai86 小时前
C# 内存管理与资源泄漏
开发语言·c#
lsx2024066 小时前
SVN 检出操作
开发语言