이 코드를 가지고 있는데 Fat 클래스의 계약 업체에서 무슨 일이 일어 났는지 이해할 수 있습니다.생성자 및 복사 생성자 설명 예제
#include <iostream>
using namespace std;
class Block{
int data;
public:
Block(int i = 10) : data(i){
cout << "I just created a Block " << endl;
}
~Block() {
cout << "I will destroy a Block with " << data << endl;
}
void inc() {
data++;
}
};
class A{
Block& block1;
Block block2;
public:
A(Block& blk) : block1(blk), block2(blk) {
cout << "I just created an A " << endl;
}
A(const A& a): block1(a.block1), block2(a.block2) {
cout << "I just created an A by copying but I will also do bad things" << endl;
block1.inc(); block2.inc();
}
~A() {
cout << "I will destroy an A " << endl;
}
void inc() {
block1.inc(); block2.inc();
}
};
class Fat{
A a;
A& ra;
A* pa;
public:
Fat(A& da) : a(da),ra(da) {
pa = new A(da);
cout << "Fat just created !" << endl;
}
~Fat() {
delete pa;
cout << "Fat to be destroyed !" << endl;
}
void inc() {
a.inc();
ra.inc();
pa->inc();
}
};
int main(){
Block block;
A a(block);
Fat fat(a);
fat.inc();
return 0;
}
이 결과 :
I just created a Block
I just created an A
I just created an A by copying but I will also do bad things
I just created an A by copying but I will also do bad things
Fat just created !
I will destroy an A
I will destroy a Block with 12
Fat to be destroyed !
I will destroy an A
I will destroy a Block with 12
I will destroy an A
I will destroy a Block with 11
I will destroy a Block with 15
왜 복사 생성자 실행 두 번합니까?
pa = new A(da);
이 때문에 그것을 da
복사하여 자유 공간에서 A
의 새로운 인스턴스를 생성이어서
Fat(A& da) : a(da), ra(da) {
라인 :
코드를 포맷하십시오. –
코드를 축소 기 또는 다른 것으로 실행 했습니까? – Borgleader
이 질문은 모든 노력이 부족하기 때문에 주제를 벗어난 것으로이 질문을 닫으려고합니다. – Eiko