C ++在哪里放置局部变量?

时间:2016-07-08 07:57:27

标签: c++

我想说C ++将局部变量放在堆栈上。 但是让我们来看看这段代码:

  class MyClass
  {
     private:
         std::map<std::string, std::pair<int, std::string> > data;

     public:
         void push(std::string a, int b, std::string c)
         {
            std::pair<int, std::string> temp;
            temp.first=45;
            temp.second=c;
            data[a] = temp;
         }
  };

在push方法调用结束时,如果此变量在本地堆栈上,则应删除临时变量。但我的计划有效,我不知道为什么。你认为data [a] = temp会复制temp吗?如果我想存储指针而不是制作副本,我该怎么办?

2 个答案:

答案 0 :(得分:4)

data[a] = temp;当然确实获取temp的值副本:std::pair<int, std::string>赋值运算符用于此。< / p>

在C ++ 11中,有一些方法可以将东西放在std::map上,从而避免使用这个深层副本。请参阅移动语义安置

答案 1 :(得分:3)

当然data[a] = temp;会复制temp并将其存储在data[a]中。 由于这只是一个副本,所以没有问题。

如果将temp的地址存储在data内(更改其定义),则会出现问题,因为它会存储悬空指针。