수조/용기를 초기화할 때 기본 구조 함수를 호출합니까 아니면 복제 구조 함수를 호출합니까
분명히 수조/용기의 대상은 똑같다. 한 가지 방법은 메모리를 열고 메모리에서 기본 구조 함수를 호출하는 것이다.다른 방법은 메모리를 열고 하나의 대상을 구성하여 대상을 n부로 복사하는 것이다. (복제 구조 함수를 호출한다.)효율적으로 볼 때 두 번째 효율은 더욱 높다고 생각한다. 왜냐하면 기본 구조를 호출하는 소모는 일반적으로 복제 구조 함수를 호출하는 것보다 많기 때문이다.복제 구조 함수는 종종 얕은 복사인데, 이렇게 하면 효율이 매우 높다.
코드를 써서 테스트해 봅시다. 우선 저는 VS2010을 사용했고 용기도 VS가 자체로 가지고 있습니다.
#include<iostream>
#include<vector>
class Test
{
public:
Test()
{
std::cout << "Ctor" << std::endl;
}
Test(const Test& T)
{
std::cout << "Cptor" << std::endl;
}
};
int main()
{
std::cout << " " << std::endl;
std::vector<Test> V(3);
std::cout << " " << std::endl;
Test T[3];
return 0;
}
결과는 다음과 같습니다.
컨테이너 Ctor Ctor 배열 Ctor Ctor Ctor Ctor가 첫 번째 방법임이 분명합니다.
이후 용기는 SGI 버전의 STL5를 사용합니다.2 (헤드 파일 vector에서 SGI 버전으로 변경됨)
출력 결과는 다음과 같습니다.
컨테이너 Ctor Cptor Cptor 배열 Ctor Ctor Ctor Ctor 분명히 컨테이너는 두 번째 방법을 사용합니다.
다시 vector의 원본 코드에서 호출 과정을 볼 수 있습니다
explicit vector(size_type n) { fill_initialize(n, T()); }
그것은 기본 구조 함수를 한 번 호출한 다음 n번 복사합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
PHP 배열에서 요소의 값이 최대 값인 키 이름을 가져옵니다.Qiita 에 " "@ PHP 매뉴얼 데이터 최대값이 나타나는 순서대로 획득 결과 키를 정렬한 후 가져오기 결과 @ paiza.IO PHP v5.6.40, v7.1.33, v7.4.4 " "@ StackOverflo...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.