我有一个名为Bucket的类,它基本上包含指向某些数据和一些标志的指针。使用下面的函数,可以设置指向数据的指针(或者我希望如此)。
template <typename T>
void Bucket<T>::setData(T datum) {
m_data = &datum;
...
}
我想知道在m_data中存储了什么以及在函数从调用堆栈中弹出后会发生什么。我的怀疑是,一旦数据超出范围,该引用实际上是无用的。如果是这样的话,动态分配传递给setData的数据并用m_data跟踪它会更好吗?
答案 0 :(得分:0)
你的怀疑是正确的。调用函数时,传递给函数的值存储在本地变量(在本例中为函数参数变量)中,该变量是在该函数的堆栈上创建的。您正在使用指针存储该局部变量的地址,并且一旦函数完成,局部变量将实际消失。在函数完成后使用指针检索该内存位置的值是未定义的。
您可以使用指针以几种方式存储传递的值,包括: