当我将指针存储到C ++中的值传递参数时会发生什么?

时间:2018-02-10 22:37:29

标签: c++ pointers scope pass-by-value

我有一个名为Bucket的类,它基本上包含指向某些数据和一些标志的指针。使用下面的函数,可以设置指向数据的指针(或者我希望如此)。

    template <typename T>
    void Bucket<T>::setData(T datum) {
        m_data = &datum;
        ...
    }

我想知道在m_data中存储了什么以及在函数从调用堆栈中弹出后会发生什么。我的怀疑是,一旦数据超出范围,该引用实际上是无用的。如果是这样的话,动态分配传递给setData的数据并用m_data跟踪它会更好吗?

1 个答案:

答案 0 :(得分:0)

你的怀疑是正确的。调用函数时,传递给函数的值存储在本地变量(在本例中为函数参数变量)中,该变量是在该函数的堆栈上创建的。您正在使用指针存储该局部变量的地址,并且一旦函数完成,局部变量将实际消失。在函数完成后使用指针检索该内存位置的值是未定义的。

您可以使用指针以几种方式存储传递的值,包括:

  1. 动态分配新空间以按照您的建议复制和存储值
  2. 使用指针进行函数调用并将指针存储在类中,使其指向保存值的内存(假设具有较长期的存储空间)