2012-07-08 2 views
2
class MyMap : std::map<char, pro::image> 
{ 
public: 
    void MyMethod(char x); 
    /** code **/ 
} 

void MyMap::MyMethod(char x) 
{ 
    pro::image my_img; // note that my_img is a local variable 
    my_img.LoadFromFile("my_image.png"); 

    this->insert(std::pair<char, pro::image>(x, my_img)); // stored in the class 
} 

이제이 코드는 안전한가요? 기본적으로 MyMapinsert 일 때 복사본my_img 일 때 저장합니까? 아니면 참조을 저장할 때입니까?클래스 변수에 STL 컨테이너에 로컬 변수를 저장하고 있습니까?

+3

안전합니다. 그러나 std :: map에는 비가 상 소멸자가 있으므로이 인스턴스를 상속해서는 안됩니다. – mfontanini

+2

이것은'pro :: image'의 복사 생성자만큼 안전합니다. 'pro :: image'가 안전하게 복사 될 수 없다면,'std :: map '는 안전하지 않습니다. –

답변

5

사본을 저장합니다.

그러나 실제로 상속이 필요합니까? std::map을 반원으로 만들어야합니다.

class MyMap 
{ 
    std::map<car, pro::image> map_; 
public: 
    void MyMethod(char x); 
    /** code **/ 
}; 

void MyMap::MyMethod(char x) 
{ 
    pro::image my_img; // note that my_img is a local variable 
    my_img.LoadFromFile("my_image.png"); 

    map_.insert(std::pair<char, pro::image>(x, my_img)); // stored in the class 
} 
+0

[이 페이지] (http://www.cplusplus.com/reference/unordered_map/unordered_map/insert/)에서는'map_.insert (std :: make_pair (x, my_img)) '형식을 대신 사용하면 그것은 "요소를 움직일 것입니다 (즉, val은 컨테이너의 새로운 요소에 의해 획득 된 내용을 잃습니다)." my_img가 자동 변수라는 점을 감안할 때 안전하지 않습니까? 또는 C++은 자동 변수에 저장된 데이터를 이동시키지 않을만큼 똑똑합니까? –

+0

@BrianGordon : 임시 이동으로 인해 이동 된 기본 초기화 된 개체가 파손되므로 데이터 이동이 안전합니다. – jxh

관련 문제