- ベストアンサー
デフォルトコンストラクタが呼ばれる条件について。
VC8のプロジェクトをVC9に移行させていたのですが、 少し気になることがあります。以下のコードはVC8ではちゃんと RAII と表示されていました。 #include <stdio.h> class RAII { public: RAII(){puts("RAIII");} ~RAII(){} }; int main() { RAII raii(); /*RAII()が呼ばれない?*/ } しかし、VC9を入れた直後から上のコードでは引数なしコンストラクタ が呼ばれなくなりました(同時にVC8のアップデートも行ったため そちらのせいかもしれませんが)。 最初は「RAII raii();」という形式は自分の記憶違いか何かだと 思っていましたが、移行後に動かなくなった自作のライブラリ を見てみると、このような宣言形式を用いていました。 もちろん「RAII raii;」と端折るだけで問題は解決するのですが、 何か気持ちが悪いです。 これは一体何が起こったのでしょうか?仕様が変わったのでしょうか? ご存知の方、ご教授お願いします。
- みんなの回答 (3)
- 専門家の回答
お礼
返答ありがとうございます。 あ、確かに警告がででますね。 気が付きませんでした。 つまり、VC側の解析力不足でプロトタイプ宣言に見えるように なってしまった。本来ならば、ちゃんと宣言されて、 コンストラクタが呼ばれるハズ ということでいいのですか? 一昨日VCをアップデートさせる前はこんなのがなかったような 気がしたのですが。。。。