デストラクタをどのようにオーバーロードしますか?デストラクタのオーバーロード方法
答えて
できません。 C++ではクラスごとにデストラクタが1つしかありません。
あなたができることは、プライベートデストラクタを作成し、デストラクタを新しく面白い方法で呼び出すいくつかのパブリックメソッドを持つことです。
class Foo {
~Foo() { ... }
public:
DestroyFoo(int) { ... };
DestroyFoo(std::string) { ... }
};
あなたはできません!各クラスはデストラクタを1つしか持てません。どうやって複数のことができますか?デストラクタは自動的にトリガされます。どの言語を呼び出すかを言語が知る方法はありません。
しかし、仮想デストラクタは別の問題です。
あなたはしません。あるクラスに2つのデストラクタを持つことはできません。
あなたは何を達成しようとしていますか?
オーバーロードとは、同じ名前を持つ複数の関数が異なる引数を持つことを意味します。 swap(int &a, int &b)
およびswap(double &a, double &b)
のようになります。デストラクタは引数をとりません。オーバーロードすると意味がありません。
特定の状況によってオブジェクトを破棄する必要がある場合は、それらの状況をチェックするために、デストラクタに適切なif文が必要です。
デストラクタに過負荷をかけたい唯一の理由は、あるデストラクタでいくつかのリソースを解放して別のデストラクタに残したいからです。
基本的に、特定のリソースを解放する必要があるかどうかを示すブール値を追加することで、独自のデストラクタからそのような動作を実現できます。このブール値はコンストラクタや他のメソッドの1つに設定され、デストラクタでは設定されているかどうかをチェックします。それが設定されていない場合は、リソースを解放します。それ以外の場合は、リソースを残しておけば、他のタスクで解放される可能性があります。 (これは、複数のオブジェクト間でリソースを共有すると意味をなさないでしょう)
デストラクタをオーバーロードできないのは、オブジェクトを破棄するときにどのデストラクタで呼び出す必要があるのかをあなたのコードが知らないためです。デストラクタを悪く呼び出すのでない限り、あなたはひどく振る舞っています! ;-)
デストラクタを決して呼び出さないので、デストラクタをオーバーロードしません。 それはそれの基本的な要点です。 (私たちがクラスで行ったことから)
- 1. C++演算子のオーバーロードとデストラクタ
- 2. デストラクタ呼び出しの後にオーバーロード代入演算子 - C++
- 3. オペレータのオーバーロードでデストラクタが呼び出される
- 4. オーバーロード演算子=、クラス内の面倒なデストラクタC++
- 5. オーバーロード方法の効率
- 6. ルーティングでオーバーロードする方法
- 7. 演算子のオーバーロードのラップ方法
- 8. foreachのオーバーロード値、修正方法?
- 9. activesupportの方法をオーバーロード::懸念
- 10. デストラクタ
- 11. 仮想デストラクタと通常のデストラクタ対
- 12. 前方イテレータのオーバーロード
- 13. メソッドをvarargsでオーバーロードする方法は?
- 14. NamedTupleに `+`をオーバーロードする方法
- 15. JRadioButton:抽象メソッドをオーバーロードする方法
- 16. オブジェクト型でメソッドをオーバーロードする方法
- 17. VB.NET:Dictionary.Item(TKey)をオーバーロードする方法
- 18. TypeScriptでメソッドをオーバーロードする方法は?
- 19. ユーザー入力を伴うオーバーロード方法
- 20. オーバーロードでenable_ifを使用する方法
- 21. デストラクタを呼び出す方法の比較
- 22. オーバーロードは、私は2つのオーバーロードされたメソッドを持っている方法
- 23. テンプレートクラスのデストラクタ
- 24. スクリプトのアンロードイベント(デストラクタ)
- 25. デストラクタの問題
- 26. Asp.netのデストラクタ
- 27. C++のコンストラクタ/デストラクタ
- 28. C++デストラクタ
- 29. デストラクタが
- 30. デストラクタ(偽)
オーバーロードされたデストラクタの使い方を知っていたのですか、それとも好奇心でしたか? 1つのクラスに対して2つのデストラクタを作成する以外のことをしたい場合は、それを起動して、それを達成する方法について話し合うことができます。 –
それが可能かどうか、それがどのように行動すると思いますか? –
それは誰かが抱く問題です。彼らは、SOがどのくらい速く反応するかを見たいと思っていました。 – Joshua