저는 현재 ctors를 배우고 있으며 몇 가지 질문이 있습니다.C++ 객체 생성 및 생성자
Foo obj(args);
Foo obj2;
obj = Foo(args);
Foo obj3 = Foo(args);
첫 번째 부분 : 단 1이라고 생성자 (푸) 및 obj
가 초기화 될이 라인에서. 그래서, 1 개체 생성.
두 번째 부분 : 임시 개체 obj2
만들기 : 기본 개체 호출. 다음 줄에 Foo
의 복사본을 만들고 복사본을 operator=()
에 전달합니다. 그게 맞습니까? 따라서 3 개의 로컬 임시 객체, 2 개의 생성자 호출.
세 번째 부분 : 1 개체 Foo
를 생성하고 operator=()
에 복사 패스. 그럼, 2 개의 임시 물건과 1 ctor 호출.
이 권리를 이해합니까? 그리고 그것이 사실이라면 컴파일러 (예 : 마지막 gcc)가 일반적인 경우에이를 최적화할까요?
'operator =()'는 일반적으로 참조로 인수를받습니다. 따라서 호출시 복사본이 없습니다. – rodrigo
obj3은 실제로 할당 생성자가 아닌 복사 생성자를 사용하여 생성됩니다. –