0

ABの2 つのクラスがあります。

クラス A には、Bptr と呼ばれる B へのポインターがあります。

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

自問する最初の質問: そもそもなぜオブジェクトを動的に割り当てたいのか? ポインターを型のメンバーに置き換えることはできますBか?

正当な理由があると仮定すると、なぜ(最新の C++ では orshared_ptrではなく) ? なぜ共有所有権が必要なのですか?scoped_ptrunique_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すると、メモリをより効率的に使用でき、(これよりも複雑な状況では) 例外の安全性を確保しやすくなります。

于 2013-09-18T17:16:56.500 に答える