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. Pythonのdir()関数は何を表していますか?
- 5. パラメータ名の前に@は何をしていますか?
- 6. このScalaの例でチルダ(〜)は何を意味していますか?
- 7. XML名前空間とは何ですか?また、Springトランザクションとは何が関係していますか?
- 8. themidia仮想C++ DLL関数は、名前
- 9. Turbo Pascal "crt"ユニットの名前は何を表していますか?
- 10. LLVMに関してSCCは何を表していますか?
- 11. 関数 "return"の最後に何を書いていますか? C++では
- 12. 関数式に名前を付けることができない場合は、関数式の名前を付けるポイントは何ですか?
- 13. Cは関数の引数の名前に__func__機能を持っていますか?
- 14. この正規表現は何を行い、関数は何をしますか?
- 15. C++関数ポインター名前のない関数を持つ配列
- 16. 静的関数を匿名名前空間と外部の間で定義することには何か違いはありますか? C++で
- 17. ブースト関数オブジェクトが指す関数の名前をデバッガに表示させることはできますか?
- 18. このチルダは何を意味しますか?
- 19. main関数に入る前に、C++で何かを印刷できますか?
- 20. 関数式で匿名関数に名前を付けますか?
- 21. 変数から名前を持つ関数を定義していますか?
- 22. "stdio"と "stdlib"はCで何を表していますか?
- 23. C++で関数の名前を変更(エイリアス/フォワード)する最良の方法は何ですか?
- 24. この表現は何を意味しますか? (CのSetConsoleTextAttribute関数)
- 25. Cローカル変数は関数と同じ名前です - どのように動作しますか?
- 26. C++では、「名前空間エイリアス」とは何ですか?
- 27. 名前空間内の関数のヘッダファイル? Cでは
- 28. SQueryLチルダ演算子は何をしますか?
- 29. 関数はC++で使用する前に定義します。
- 30. 名前付き関数はJavaScriptで過小評価されていますか?
〜はビット単位の否定演算子です。関数定義に適用すると、関数はそれが行うことの反対の*を行うことを意味します。例えば、 '〜push()'は実際にスタックをポップし、 '〜writeSeriousComment()'このようなコメントを実際に生成します。 –
このサイトでC++の質問のほとんどを投稿しているような人のために、j_random_hackerのコメントを読もうとしないでください。ユーモア(そして何らかの基本的なプログラミング知識)を持つ人々の利益のために – Alan
はj_random_hackerのコメントを読もうとします。 –