2010-07-02 3 views

답변

3

FOO foo;은 생성자를 호출합니다.
foovect.push_back(foo);은 복사 생성자를 호출합니다. 이것에 대한

#include <iostream> 
#include <vector> 

class FOO 
{ 
public: 
    FOO() 
    { 
     std::cout << "Constructor" << std::endl; 
    } 
    FOO(const FOO& _f) 
    { 
     std::cout << "Copy Constructor" << std::endl; 
    } 
}; 

int main() 
{ 
    FOO foo; 
    std::vector<FOO> foovect; 
    foovect.push_back(foo); 
} 

출력 : 당신이와 push_back을 수행 할 때
Constructor
Copy Constructor

+0

완벽하게 지우고 감사합니다. – jmasterx

3

아니, 복사 생성자가 사용되며,이처럼 보이는 하나, 즉 : 기본 복사 생성자가 제공

FOO(const FOO & f); 

컴파일러가 직접 제공하지 않으면

+0

그래서 생성자가 두 번 호출되지 않습니까? 내 생성자가 메시지 상자를 표시하면 1 메시지 상자 만 보게됩니까? – jmasterx

+0

@user 일단 "foo"라는 객체 (코드에서)를 만들고 한번 벡터에 복사본을 만듭니다. –

+0

@ user146780 : "생성자"는 무엇을 의미합니까? 기본 생성자, 복사 생성자 및 어쩌면 더 많은 것이 있습니다. – JWWalker

0

, 개체는 는 벡터에를 복사합니다. 즉, 객체의 복사 생성자가 호출됩니다. 모든 표준 라이브러리 컨테이너는 객체 자체가 아닌 객체의 사본을 처리합니다. 그 행동을 원한다면 포인터를 사용해야 할 것입니다.

관련 문제