ローカルで定義したクラスを任意の場所でデストラクタを実行したくなりました。かなり特殊ケースでしょう。
やり方としては、{}で括る。
{
class a;
処理
} ←ここでデストラクタ発生。
{ }は別に whileとかforとか関数定義でなくても使えます。前に人のソースを読んでいるときにあってなんでこんなことしているかわからなかったのですが、わかりました。そういえば、C++からはfor文で回すなかに変数を定義しても、次のループで同じ名前の変数のはずなのにエラーはでません。
どういう意味かというと、C++では、{ }の中でて定義したローカル変数は、その括弧の中のみ有効であるからです。「forやifなどの制御構文を持たないブロック」というらしいです。
ここでちと思うこととして、Forループの中にローカルのクラスを定義すると、ループごとにコンストラクタ・デストラクタが呼び出され、領域が定義されることとなる。これは処理が重くなる原因となるため、頻繁に呼び出すものはループの外に出す。当たり前のことであるが、{}の本当の意味を知ると、なるほどでした。
無知な私の学習となりました。
参考:
http://oshiete.goo.ne.jp/qa/6134667.html
http://tessy.org/wiki/index.php?XML%A1%A6YAML%B7%C1%BC%B0%A4%C7%A4%CE%A5%C7%A1%BC%A5%BF%CA%DD%C2%B8
0 件のコメント:
コメントを投稿