1

我基本上是在尝试通过引用传递,以便函数对向量所做的更改在函数范围之外是永久性的。我是否正确地认为传递一个指针向量足以自行完成此任务?这在我的脑海中完全有道理,但我只是想确认我没有以某种方式在这里犯错误。

void updateCursors(vector<cursor*> cursors)

这应该足以更改这些指针指向的对象中的数据,是吗?

4

2 回答 2

2

您可以通过引用传递向量 -

vector<cursor*>& cursors

但是你不应该在向量中持有指针。推荐的方法是保存可复制/可移动的对象 -

vector<cursor>& cursors
于 2012-06-07T14:11:20.017 回答
1

“这应该足以改变这些指针所指向的对象中的数据了吧?”
当您将向量传递给此函数时,将创建副本(因为它是按值传递),但由于它是指针向量,是的,因此对对象的更改将在外部可见。

但是最好通过引用传递它,这样就不会创建冗余副本:

void updateCursors(vector<cursor*>& cursors)

另请注意,使用裸指针会带来丑陋的内存管理。如果可能的话,我建议你使用对象向量(vector<cursor>),或者如果你真的有充分的理由使用指针,那么我建议你使用智能指针(shared_ptr<cursor>而不是cursor*)。这个问题可以帮助你:RAII and smart pointers in C++

于 2012-06-07T14:11:08.070 回答