template <class T>
class Stack
{
public:
Stack(int = 10) ;
~Stack() { delete [] stackPtr ; } //<--- What does the "~" signify?
int push(const T&);
int pop(T&) ;
int isEmpty()const { return top == -1 ; }
int isFull() const { return top == size - 1 ; }
private:
int size ;
int top ;
T* stackPtr ;
} ;
答えて
それはデストラクタだ、それはなど、インスタンスが破棄されたメモリを解放など
ここibm.comからの説明です:
デストラクタは通常、メモリを解放し、その他のクリーンアップを行うために使用されていますオブジェクトが破壊されたときのクラスオブジェクトとそのクラスメンバデストラクタは、クラスオブジェクトがスコープから外れたとき、または明示的に削除されたときに呼び出されます。
これはデストラクタでhttps://www.ibm.com/support/knowledgecenter/SSB27U_5.4.0/com.ibm.zos.r9.cbclx01/cplr380.htm
を参照してください。これは、オブジェクトが破棄されたときに呼び出されます(有効範囲外または削除されたとき)。
明確にするには、〜NameOfTheClassをコンストラクタのように使用する必要があります。他の名前は無効です。
「他の名前は有効ですか? –
古い答え...私はそれが〜の後ではどんな名前でも構いませんが、それはクラス名とコンストラクター名と同じであることを意味すると思います。 – Klaim
デストラクタです。この関数は、オブジェクトがスコープ外に出たときに呼び出されることが保証されています。
...スタックに割り当てられている場合。ヒープ上に割り当てられているオブジェクトに対して 'delete'が呼び出されたとき。 – Jherico
@Jherico:実際には、キーワード「削除」が使用されています。キーワード "new"は "operator new"を呼び出し、返されたアドレスのコンストラクタを呼び出して、スタック上の "新しい"メモリが完全に可能であることを覚えておいてください。 :)キーワード "delete"はデストラクタを呼び出し、 "operator delete"を呼び出します。 – Troubadour
@Jhericoまたはnamespaceスコープに存在するか、静的なクラスメンバーまたは関数ローカルの静的変数です。静的な記憶期間です。言い換えれば、オートストレージを備えたすべてのヴァイラブルは、自動的に適切なときに破棄されます。 [Static Initialization Order Fiasco](http://stackoverflow.com/a/1005709/85371)にご注意ください。 – sehe
デストラクタ(ダイナミックメモリを解放する)
class Stack
のデストラクタです:このメソッドは、クラスのインスタンスが破棄されたときに呼び出されます。
しかし、それはタイトルに表示されているとおり、あなたの質問を取る:
C++ではチルダを何「〜」関数名は意味の前に?
別の状況があります。どんな文脈でも、クラス名(デストラクタコンテキスト)の直前のを除くでは、~
は1の補数(またはビット単位ではない)演算子です。それは非常に頻繁に出てくるしません確かに、しかし、あなたは似ていますが、非常に異なる意味を持ち
if (~getMask()) { ...
のようなケースを想像することができます。
- 1. MySQLの関数名 'ELT'は何を表していますか?
- 2. 関数名の前にアスタリスクは何を意味しますか?
- 3. c関数内のWINAPIタグの正しい名前は何ですか?
- 4. mysql c apiのload_defaults()関数の新しい名前は何ですか?
- 5. シェフのログ構造でリソースブロックの名前は何を表していますか?
- 6. このC関数は何をしていますか?
- 7. この新しいC++構文の名前は何ですか?
- 8. パラメータ名の前に@は何をしていますか?
- 9. Pythonのdir()関数は何を表していますか?
- 10. このScalaの例でチルダ(〜)は何を意味していますか?
- 11. XML名前空間とは何ですか?また、Springトランザクションとは何が関係していますか?
- 12. バイナリコードの名前とは何ですか?各整数は1と0の等しい数で表されます
- 13. WPF/C#の名前比較は何を意味しますか?
- 14. Turbo Pascal "crt"ユニットの名前は何を表していますか?
- 15. x変数ごとにy変数に対してプロットを見る関数の名前は何ですか?
- 16. themidia仮想C++ DLL関数は、名前
- 17. LLVMに関してSCCは何を表していますか?
- 18. エリクサーの名前付き関数と匿名関数の違いは何ですか?
- 19. 関数 "return"の最後に何を書いていますか? C++では
- 20. C++名前空間との違いは何ですか
- 21. タイプの後に名前を付ける変数の名前は何ですか?
- 22. 関数式に名前を付けることができない場合は、関数式の名前を付けるポイントは何ですか?
- 23. このチルダは何を意味しますか?
- 24. 静的関数を匿名名前空間と外部の間で定義することには何か違いはありますか? C++で
- 25. この正規表現は何を行い、関数は何をしますか?
- 26. Cは関数の引数の名前に__func__機能を持っていますか?
- 27. C++継承時に関数の引数の名前を変更しますか?
- 28. T :: *は関数のパラメータリストの宣言で何を表していますか?
- 29. URL( "../(フォルダ名)/(イメージ名)")では、 "../"は何を表していますか?
- 30. 関数の名前がわからない場合は、関数を引数として渡します。
〜はビット単位の否定演算子です。関数定義に適用すると、関数はそれが行うことの反対の*を行うことを意味します。例えば、 '〜push()'は実際にスタックをポップし、 '〜writeSeriousComment()'このようなコメントを実際に生成します。 –
このサイトでC++の質問のほとんどを投稿しているような人のために、j_random_hackerのコメントを読もうとしないでください。ユーモア(そして何らかの基本的なプログラミング知識)を持つ人々の利益のために – Alan
はj_random_hackerのコメントを読もうとします。 –