2016-09-13 6 views
-1

저를 수정하십시오 이 수행 할 때 연산자를 사용한다 : 나는 같은 결과를 얻을 모두 생각(C++) 복사 생성자 대 할당 연산자 : 할당하면서</p> <pre><code>myClass newInstant = oldInstant; </code></pre> <p>: 각 암시 적으로 사용하는 경우 내가 틀렸다하지만이 작업을 수행 할 때 나의 이해는 복사 생성자가 사용되는 경우

myClass newInstant; 
newInstant = oldInstant; 

을하지만 새로운 데이터에 복사 한 후 첫 번째 생성자를 사용하지 않도록 때문에 첫 번째는보다 직접적이다.

확실하지 않은 것은 함수가 전달 될 때 복사 생성자를 사용하거나 할당 연산자를 사용하여 복사된다는 것입니다. 또한 함수에서 인스턴트를 반환 할 때 사용됩니다.

일반적으로 복사 생성자와 할당 연산자가 사용되는 경우는 무엇입니까?

마지막 질문 하나, 복사하지 않고 어떻게 값을 반환 할 수 있습니까? 반환 된 인스턴트가 사본이고 이전 인스턴트가 삭제 된 경우 어떻게하면 더 효율적이 될 수 있습니까?

감사

당신이 당신의 예에서와 같은 소재 기존 하나의 개체 초기화 할 때 복사 생성자를 사용
+2

복사 생성자는 기존 인스턴스를 사용하여 새 인스턴스를 만들고 할당 인스턴스를 사용하여 기존 인스턴스를 다른 인스턴스로 덮어 쓸 때 사용됩니다. 그래서 값으로 함수에 전달되면 새로운 인스턴스가 기존 인스턴스에서 생성되므로 ......... 값으로 반환 할 때 복사본을 피하려면 코드가 반환 값 최적화를 허용하는지 확인하거나 복사하는 데 비용이 많이 든다. –

+0

"마지막 질문"은 별도의 질문입니다. 질문 당 1 개의 질문을 고집하십시오. 사이트를 검색하여 해당 질문에 대한 답변을 찾을 수 있어야합니다. –

답변

1

:

vClass oldInstant; 
yClass newInstant = oldInstant; // invoking copy constructor 

할당 연산자의 다른 하나 기존의 객체가 기존 가정 해 봅시다 뭔가를 할당하는 데 사용됩니다 .

myClass newInstant; // invoking myClss constructor. so from now and on newInstant is already existing object; 
newInstant = oldInstant; //oldInstant is also an already existing object. now assign one object to another. (assigning oldInstant to newInstant) 

해당 용도는 완전히 다르지만 각각 고유 한 용도가 있음을 명심하십시오. *** 원래 개체를 저장하고 복사본에서 작업하기를 원하기 때문에 개체를 만들고 다른 기존 (복사 생성자)에 할당하려는 경우가 있습니다.

*** 할당 연산자 우리는 그것을 피할 수 없습니다 !! 당신은 수학 연산자에서 equals 연산자 '='없이 계산을 할 수 있습니까?

가지 생성자를 복사 할당 연산자가 수행해야합니다 힙 (포인터가 '새로운'키워드로 할당)에 대한 몇 가지 메모리가있을 때

*** 복사 생성자는 "깊은 복사"하지 "얕은 복사"를 사용한다

이것은 약간의 설명 일 뿐이지 만, 회원들이 투표를하기 때문에 요청하기 전에 더 많이 검색해야합니다.

0

은 기술적으로 복사 생성자는 다음과 같은 경우에 호출됩니다 :

  1. 명시 복사 건설
  2. 값에 의한 호출
  3. 할당 연산자는 구현

값을 기준으로

  • 수익이를 없애다 인스턴스의 이전 내용을 새 내용으로 종료합니다.쇼케이스를 예로 들면 다음과 같습니다.

    다른 점을 명심하십시오. 복사 스왑은 대입 연산자에 포함됩니다.

    최근 질문에 대해서는 현대 컴파일러가 불필요한 복사 생성자 호출을 제거하기 위해 복사 생성자 elision을 적용합니다.