가능한 중복 :
Line1
에서복사 생성자는#include <iostream> using namespace std; class sample { private: int x; public: sample(int a=0) : x(a) { cout << "default ctor invoked\n"; } sample(const sample& obj) { cout << "copy ctor invoked\n"; } }; int main() { sample s2 = sample(20); //Line1 sample s3 = 20; //Line2 return 0; }
, 첫
sample
클래스의 생성자가 호출됩니다
Why copy constructor is not called in this case?
아래의 샘플 프로그램을 고려 explicitly
을 인수 20으로 사용하십시오. s2를 초기화하기 위해서 불려가는 복사 생성자
Line2에서 처음에 sample
클래스의 생성자는 우선 인수 20을 사용하여 implicitly
을 호출합니다. 여기에서도 복사 생성자를 호출하여 s2를 초기화 할 것으로 예상됩니다.
두 경우 모두 복사 생성자가 호출되지 않습니까? 왜 이런 일이 일어나는 걸까요? 복사 생성자 호출에 대한 나의 이해가 잘못되었다고 생각합니다. 누군가 내가 잘못 가고있는 곳을 바로 잡을 수 있습니까?
이것은 좋은 예입니다. –
복사 생성자에 대한 호출은 일부 상황에서 생략 될 수 있습니다. –
@ R.MartinhoFernandes : 예. 일부 상황. 그러나 s2와 s3은 어떤 식 으로든 초기화되어야합니다. 어떻게 그것을 ctor를 호출하지 않고 이루어 집니까? –