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;

}

相关推荐
hqwest8 分钟前
码上通QT实战04--主窗体布局
开发语言·css·qt·布局·widget·layout·label
Frank_refuel11 分钟前
C++之内存管理
java·数据结构·c++
leiming612 分钟前
c++ qt开发第一天 hello world
开发语言·c++·qt
奋斗者1号17 分钟前
MQTT连接失败定位步骤
开发语言·机器学习·网络安全
33三 三like25 分钟前
毕设任务分析
开发语言
@小码农28 分钟前
6547网:202512 GESP认证 C++编程 一级真题题库(附答案)
java·c++·算法
vyuvyucd31 分钟前
Linux线程编程:POSIX与C++实战指南
java·开发语言
Kratzdisteln33 分钟前
【MVCD 3】
开发语言·php
癫狂的兔子34 分钟前
【Python】【NumPy】random.rand和random.uniform的异同点
开发语言·python·numpy
TDengine (老段)34 分钟前
TDengine C/C++ 连接器入门指南
大数据·c语言·数据库·c++·物联网·时序数据库·tdengine