다음 코드 스 니펫을 사용하여 C++에서 객체를 만드는 두 가지 방법을 비교합니다. 이 코드에서객체 생성과 관련된 생성자 및 소멸자 호출
#include <iostream>
using std::cout;
using std::endl;
class Foo {
public:
Foo() : x(0) { cout << "In Foo constructor." << endl; }
~Foo() { cout << "In Foo destructor." << endl; }
Foo(const Foo&) { cout << "In Foo copy constructor." << endl; }
// Assignment operator.
Foo& operator=(const Foo&) {
cout << "In assignment operator." << endl;
return *this;
}
private:
int x;
};
int main() {
cout << "Constructing Foo 1" << endl;
Foo Foo_1;
cout << "Constructing Foo 2" << endl;
Foo Foo_2 = Foo();
return 0;
}
출력은 : 나는 비주얼 C++ 2010 (컴파일러 버전 16.x)를 사용하고 내가 cl /EHsc /W4 test.cpp
를 사용하여 조각을 컴파일하고
Constructing Foo 1
In Foo constructor.
Constructing Foo 2
In Foo constructor.
In Foo destructor.
In Foo destructor.
. Foo_2
을 만들 때 임시 객체를 할당하기 위해 생성자와 소멸자를 추가로 호출하고 할당 연산자를 호출하여 임시 객체를 Foo_2
에 할당하려고합니다. 누군가 이것이 왜 그런지 설명 할 수 있습니까? 내가 여기서 아주 명백한 것을 놓치고 있다면 사과드립니다.
아니, 구문 설탕 아니에요. 'Foo'의 복사 생성자를 private로 만들고 다시 시도하십시오. –
@Pete Becker - 내 잘못, 답장을 수정했습니다 – SomeWittyUsername
'Foo Foo_2 (Foo()); '는 왜 그의 샘플에 단지 두 개의 생성자가 3 개가 아닌지 설명하지 않습니다. –