Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将局部变量存储在类中的STL容器中是否安全? classmymap:std::map { 公众: void-MyMethod(charx); /**代码**/ } void MyMap::MyMethod(char x) { pro::image my\u img;//请注意,my\u img是一个局部变量 my_img.LoadFromFile(“my_image.png”); 这个->插入(std::pair(x,my_img));//存储在类中 }_C++_Variables_Stl_Map_Containers - Fatal编程技术网

C++ 将局部变量存储在类中的STL容器中是否安全? classmymap:std::map { 公众: void-MyMethod(charx); /**代码**/ } void MyMap::MyMethod(char x) { pro::image my\u img;//请注意,my\u img是一个局部变量 my_img.LoadFromFile(“my_image.png”); 这个->插入(std::pair(x,my_img));//存储在类中 }

C++ 将局部变量存储在类中的STL容器中是否安全? classmymap:std::map { 公众: void-MyMethod(charx); /**代码**/ } void MyMap::MyMethod(char x) { pro::image my\u img;//请注意,my\u img是一个局部变量 my_img.LoadFromFile(“my_image.png”); 这个->插入(std::pair(x,my_img));//存储在类中 },c++,variables,stl,map,containers,C++,Variables,Stl,Map,Containers,现在,这个代码安全吗?基本上,当我插入时,MyMap是否存储myimg的副本,或者它是否存储引用?它将存储副本 然而,你真的需要继承吗?您应该使std::map成为类成员 class MyMap : std::map<char, pro::image> { public: void MyMethod(char x); /** code **/ } void MyMap::MyMethod(char x) { pro::image my_img; //

现在,这个代码安全吗?基本上,当我插入时,
MyMap
是否存储
myimg
的副本,或者它是否存储引用?

它将存储副本

然而,你真的需要继承吗?您应该使
std::map
成为类成员

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
}
classmymap
{
std::map;
公众:
void-MyMethod(charx);
/**代码**/
};
void MyMap::MyMethod(char x)
{
pro::image my\u img;//请注意,my\u img是一个局部变量
my_img.LoadFromFile(“my_image.png”);
map_u.insert(std::pair(x,my_img));//存储在类中
}

这很安全。但是,std::map有一个非虚拟析构函数,因此您不应该从它继承。这只与
pro::image
的复制构造函数一样安全。如果无法安全复制
pro::image
,则
std::map
也不安全。表示如果改为使用表单
map_u.insert(std::make_pair(x,my_img))
,则它将“移动元素(即val丢失其内容,该内容由容器中的新元素获取)。”如果my_img是一个自动变量,这是否不安全?或者C++足够聪明,不试图移动存储在自动变量中的数据吗?@ Brangangord:数据移动是安全的,因为临时结束破坏移动到它的位置的默认初始化对象。
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
}