2012-07-08 35 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 
} 

現在,是代碼安全嗎?基本上,MyMap是否拷貝my_img當我insert它,還是它存儲參考是否將一個本地變量存儲在類安全的STL容器中?

+3

這很安全。然而,std :: map有一個非虛擬的析構函數,所以你不應該從它繼承。 – mfontanini 2012-07-08 03:37:54

+2

這隻與'pro :: image'的複製構造函數一樣安全。如果不能安全地複製'pro :: image',比'std :: map '不安全。 – 2012-07-08 03:44:24

回答

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++足夠智能,不會嘗試移動存儲在自動變量中的數據? – 2014-01-30 22:52:30

+0

@BrianGordon:數據移動是安全的,因爲臨時結束會破壞已移動到其位置的默認初始化對象。 – jxh 2014-01-31 01:36:14

相關問題