#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 件のコメント:
コメントを投稿