こんばんは,みなさんはAPIやその他配布物を作成されるとき,Pimplイディオムを使用されていますか?
また使用時は,Implに隠ぺいする情報には何を選択していますか?
例)
1.プライベートメンバすべて
2.プライベートメンバ変数のみ
3.プライベートメンバメソッドのみ
別の質問になりますが,まず次のコードを見ていただきたいです.
※ 疑似コードよりなので名前や引数,処理は適当です.
// A.h
class A{
private:
class Impl;
Impl mImpl;
public:
// method
};
// A.cpp
class A::Impl{
public:
char *mData;
int mSize;
Impl()
: mData(nullptr),
mSize(0)
{}
};
A::A( /* args... */ )
: mImpl( new A::Impl() )
{
// process...
mImpl->mSize = input.getDataSize();
mImpl->mData = new char[ mImpl->mSize ];
// process...
}
A::~A()
{
delete mImpl;
mImpl = nullptr;
}
このとき,mImpl->mDataのdeleteはclass Implのデストラクタで行うべきなのか,class Aのデストラクタで行うべきなのかどちらなのでしょう?
いまはclass Implでdelete[] mImplと記述してますが,heapメモリの確保はclass Aで行っているのでなんだか気持ち悪いというのがあります.
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。