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;

}

相关推荐
余衫马15 分钟前
在Win10下编译 Poppler
c++·windows·qt·pdf·poppler
工程师00724 分钟前
C#中的AutoUpdater自动更新类
开发语言·c#·自动更新开源库·autoupdate
lsx20240628 分钟前
Java 泛型
开发语言
王老师青少年编程28 分钟前
2024年3月GESP真题及题解(C++七级): 俄罗斯方块
c++·题解·真题·gesp·csp·俄罗斯方块·七级
oioihoii35 分钟前
拆解融合:测试开发,一个关于“更好”的悖论
c++
jghhh0141 分钟前
基于MATLAB的可见光通信系统仿真实现
开发语言·matlab
xiaoqider1 小时前
C++模板进阶
开发语言·c++
yaonoran1 小时前
【无标题】
java·开发语言·变量
康小庄1 小时前
浅谈Java中的volatile关键字
java·开发语言·jvm·spring boot·spring·jetty
移幻漂流1 小时前
C/C++并发编程详解:如何写出优秀的并发程序
c语言·开发语言·c++