gpt4 book ai didi

c++ - 在这种情况下如何使用 shared_ptr of boost?

转载 作者:行者123 更新时间:2023-11-28 07:25:09 25 4
gpt4 key购买 nike

我有 2 个类(class),AB

在类 A 中,我有一个指向 B 的指针,称为 Bptr。

我在 A 的构造函数中为 Bptr 分配内存,并在 A 的析构函数中释放 Bptr 的内存。

class B {
//whatever
public:
B(int,int);
}

class A {
private:
B * Bptr;
public:
A();
}

A::A(){
Bptr = new B(2,5);
}

A::~A(){
delete Bptr;
}

如何在我的代码中集成 Boost 并使用智能指针:boost::shared_ptr?我的代码会是什么样子?

非常感谢!

最佳答案

第一个问题要问自己:为什么一开始要动态分配对象?能否将指针替换为 B 类型的成员?

假设有充分的理由,那么为什么要使用 shared_ptr(而不是 scoped_ptr 或现代 C++ 中的 unique_ptr)?为什么需要共享所有权?

一旦你回答了这些问题,并确定共享所有权是正确的解决方案,只需将 B* 替换为共享指针,在构造函数中对其进行初始化,并摆脱冗余的析构函数(假设其他任何事情都不需要它)。

class A {
private:
boost::shared_ptr<B> Bptr;
public:
A() : Bptr(boost::make_shared<B>(2,5)) {}
};

你可以简单地用一个指针初始化它,Bptr(new B(2,5)),但是使用 make_shared 可以更有效地使用内存并且(在更多比这更复杂的情况)更容易确保异常安全。

关于c++ - 在这种情况下如何使用 shared_ptr of boost?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18878191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com