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;

}

相关推荐
Wild_Pointer.6 小时前
高效工具实战指南:Procexp64进程资源管理器
c++·windows
cjr_xyi6 小时前
AT1202Contest_c binarydigit 题解
c语言·c++·算法
会周易的程序员6 小时前
Libnodave S7 通信库:架构设计与实现解析
linux·c++·物联网·架构·c·s7·工业协议
豆浆D油条6 小时前
QT容器类QList调用erase崩溃
开发语言·qt·rpc
jinyishu_6 小时前
C++ 多态完全指南:从基础语法到底层原理
开发语言·c++·程序人生·面试
larance7 小时前
机器学习特征预处理之标准化/归一化
开发语言·python·机器学习
农村小镇哥7 小时前
C#中的字符串格式化
服务器·开发语言·c#
Android洋芋8 小时前
AI辅助C盘清理
c语言·开发语言·人工智能·ai辅助c盘清理
来一碗刘肉面8 小时前
队列的链式实现
数据结构·c++·算法·链表
naturerun9 小时前
逐步插入回路法构造欧拉回路的算法
c++·算法