私はC++を学んでいますが、クラスのデストラクタについては明確ではありません。例:C++:公開と非公開ですべての宣言を削除するのは正しいですか?
class A:
{
public:
int valueA;
private:
int valueB;
};
A:~A()
{
delete valueA;
delete valueB;
}
したがって、基本的にすべての宣言を公開と非公開で削除できますか?
私はC++を学んでいますが、クラスのデストラクタについては明確ではありません。例:C++:公開と非公開ですべての宣言を削除するのは正しいですか?
class A:
{
public:
int valueA;
private:
int valueB;
};
A:~A()
{
delete valueA;
delete valueB;
}
したがって、基本的にすべての宣言を公開と非公開で削除できますか?
いいえ、delete
は、new
を使用して割り当てられたものです。 int
のような単純な値の型は決して削除する必要はありません。
クラスはをした場合、データが動的にデストラクタは通常かかわらず、データがパブリックまたはプライベートで天気をの、それのすべての割り当てを解除する必要がありコンストラクタによって以降の他のいくつかの方法のいずれかによってnew
を使用して割り当てられています。
動的に割り当てられた動的に割り当てられたポインタメンバーを持つと、デザインが最適ではない可能性があります。
+1最後の議論は議論の余地がありますが、これは明らかにそれを得るための投稿ではありません。 –
ポインタのみを削除することはできません。
あなたのデストラクタはプライベートメンバーにアクセスできますが、実際にはポインタ(公共のものであっても)であれば削除できます。
あなたのクラスのメンバがポインタであるという理由だけでも、デストラクタはそのメンバを削除するものではありません。 C++には「所有権」という概念があります。所有者は通常、作成者(常に新しいものが呼び出された場所)と同じではありません。
新しいT [x]を使用する配列では、delete []を使用する必要があることに注意してください。
あなたのために削除を呼び出す自動オブジェクトがあります。これらはスマートポインタと呼ばれ、手動で削除を実行するよりも、ほとんどの時間それらを使用する必要があります。
デストラクターは、単にポインタを削除する以外のことを行う可能性があります。たとえば、クラスが作成時にある種類のグラフにアタッチされている場合、デストラクタは自動的にそのグラフから自身を削除できます。
delete
は、ポインタ用です。一般的な意味では、はい、所有するメモリ(あなたのクラス内で予約しているので、削除するのはあなたの責任です)のすべての公開変数と非公開変数を削除する必要があります。
いいえ、あなたのクラスで構築されたいくつかのポインタを削除してください。
あなたは何から学んでいるのですか? –