2011-02-15 6 views
1
enum Reaction{single,chain}; 

class X 
{ 
X* parent_; 
X* left_; 
X* right_; 
Reaction* reaction_;//this pointer points from every obj to the same place, cannot be static 
}; 

Q:reaction_を一度削除するにはデストラクタを設計する方法は?多分私は完全にあなたの質問を理解していなかった、ポインタを一度だけ削除するには?

~X() 
{ 
    delete reaction_; 
} 

または:

答えて

6

三の即時アイデアで

0

これは何の問題です!

1)クラスXのインスタンスによって所有されreaction_必要があります:あなたのオブジェクト

+1

"このポインタはすべてのオブジェクトから同じ場所を指しますが、静的ではありません" –

+0

@Fred Nurk:Xのすべてのオブジェクトは、 'reaction_'のインスタンスと同じ意味ですか? – Nawaz

+0

いいえ、すべてのインスタンスが同じreaction_を共有している場合、それはreaction_が静的であることを意味します。明らかに、すべてのオブジェクトのreaction_メンバーは同じ値を持っています。 (私はなぜこのようなケースであるのか理解できませんが、このポスターからの質問の価値はほとんど分かりませんが、明らかにそうです) –

0

使用boost::shared_ptr<Reaction>? X ::〜Xがそれを削除する必要がないように、外部エンティティが所有することはできませんか?

2)は、ブースト:: shared_ptrの

3)は、静的なint型を使用して、独自の参照カウントを実装してください。マルチスレッドの場合はロックを覚えておいてください。

0

boost::shared_ptrまたはstd::shared_ptr(C++ 0x)を使用してください。参照を数え、必要に応じて削除を呼び出します。