0

我有 2 个班级,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?我的代码会是什么样子?

非常感谢!

4

2 回答 2

1

第一个要问自己的问题:为什么要首先动态分配对象?你可以用 type 的成员替换指针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)),但是 usingmake_shared可以更有效地使用内存并且(在比这更复杂的情况下)更容易确保异常安全。

于 2013-09-18T17:16:56.500 回答
0
class B {
//whatever
public:
    B(int,int);
}

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

A::A(){
    Bptr = boost::make_shared<B>(2,5);
}

A::~A(){
  // Bptr automatically deleted if this is the only boost::shared_ptr pointing to it
}

尽管您可以简单地使用new B(2,5)而不是boost::make_shared<B>,但后者是异常安全的。

于 2013-09-18T17:13:16.203 回答