벡터의 Push_back 작업 중 복사 생성자의 다중 호출
C에서 push_back() 메서드를 사용하여 요소가 벡터에 추가되는 경우 , 해당 요소 유형의 복사 생성자가 일반적으로 사용됩니다. 그러나 특정 시나리오에서는 복사 생성자의 여러 호출이 관찰될 수 있습니다.
다음 코드 조각을 고려하세요.
<code class="cpp">class Myint { private: int my_int; public: Myint() : my_int(0) { cout << "Inside default " << endl; } Myint(const Myint& x) : my_int(x.my_int) { cout << "Inside copy with my_int = " << x.my_int << endl; } void set(const int& x) { my_int = x; } }; vector<Myint> myints; Myint x; myints.push_back(x); x.set(1); myints.push_back(x);</code>
이 코드가 실행되면 다음 출력이 생성됩니다.
Inside default Inside copy with my_int = 0 Inside copy with my_int = 0 Inside copy with my_int = 1
이 출력은 복사 생성자가 예상한 것보다 두 번이 아니라 네 번 호출되었음을 나타냅니다. 이 동작의 원인은 벡터 메모리 관리의 내부 작동에 있습니다.
내부 용량에 도달한 벡터에 대해 push_back()이 호출되면 새 요소를 수용하기 위해 벡터를 다시 할당해야 합니다. 이 재할당 중에 기존 요소가 새 메모리 위치에 복사됩니다. 이 프로세스로 인해 각 요소에 대한 복사 생성자가 추가로 호출됩니다.
이러한 다중 복사 동작을 방지하려면 다음과 같은 몇 가지 조치를 취할 수 있습니다.
이러한 기술을 사용하면 복사 생성자의 불필요한 호출을 최소화하여 벡터 작업의 효율성을 높일 수 있습니다.
위 내용은 `벡터`에서 `push_back()`을 사용할 때 `Myint` 객체의 복사 생성자가 여러 번 호출되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!