は、私は公共のヘッダにそのような何かを持っていると言う:C++でvoidからキャストされたポインタを削除しても安全ですか?
class MyClass
{
public:
MyClass();
protected:
virtual ~MyClass();
private:
void *pSomeInternalClass;
}
そして、ここでは私の実装です:
MyClass::MyClass()
{
pSomeInteralClass = (void *) new SomeInternalClass();
}
MyClass::~MyClass()
{
SomeInternalClass *pTemp = (SomeInternalClass *) pSomeInternalClass;
delete pTemp;
pSomeInternalClass = NULL;
}
ボイドポインタの背後にある考え方は、私がdont'tということです含める必要がありますパブリックヘッダ内の内部クラスの定義。
私の質問は、私は安全な方法でvoidポインタを処理していますか?削除に問題はありますか?
ありがとうございます!
Afaik、元のタイプにキャストバックする必要はありません。メモリ内の対応するブロックを見つけるためにアドレスのみが使用されます。 – msteiger
MyClassと同じレベルでヘッダのクライアントに公開するのではなく、MyClassのprivate:セクションの中でクラスを宣言する方がずっと良い考えです。 –
いいえ、元の型にキャストする必要があります(仮想デストラクタは少し緩和します)。 'A * a = new A(); B * b =(B *)(void *)a; 'A ::〜A'ではなく' B ::〜B'を呼び出すでしょう。@ user198397 – Mat