#include <cstdio> #include <cstdlib> #include <string> class C { private: int d; public: C() { d = 5;}; ~C() {}; C(C m) { d = m.d; } virtual void a() { printf("aaa"); } int GetD() { return d; } }; int main() { C m; C m2(m); printf("%d\n",m2.GetD()); }
A.
大抵のコンパイラではコンパイルできないはず.上記コピーコンストラクタは値渡しのパラメータが定義されているので,このコピーコンストラクタが呼ばれ,ランタイム上で値渡しのパラメータmを”コピー”しようとコピーコンストラクタを更に呼び... と永遠に再帰呼び出しが発生する.
この問題を避けるには,const C&にパラメータの宣言を変更すればよい.
0 件のコメント:
コメントを投稿