Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.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++ 如何传递指针向量以便在函数中更改它们?_C++_Pointers - Fatal编程技术网

C++ 如何传递指针向量以便在函数中更改它们?

C++ 如何传递指针向量以便在函数中更改它们?,c++,pointers,C++,Pointers,我基本上是通过引用来传递的,因此函数对向量所做的更改在函数范围之外是永久性的。我认为传递一个指针向量就足以独立完成这一任务,这是正确的吗?这在我的头脑中是完全有道理的,但我只是想确认我在这里没有犯错误 void updateCursors(vector<cursor*> cursors) void更新游标(向量游标) 这应足以更改这些指针指向的对象中的数据,是吗?“这应足以更改这些指针指向的对象中的数据,是吗?” 将向量传递到此函数时,将创建副本(因为它是通过值传递的),但由于它

我基本上是通过引用来传递的,因此函数对向量所做的更改在函数范围之外是永久性的。我认为传递一个指针向量就足以独立完成这一任务,这是正确的吗?这在我的头脑中是完全有道理的,但我只是想确认我在这里没有犯错误

void updateCursors(vector<cursor*> cursors)
void更新游标(向量游标)
这应足以更改这些指针指向的对象中的数据,是吗?

“这应足以更改这些指针指向的对象中的数据,是吗?”
将向量传递到此函数时,将创建副本(因为它是通过值传递的),但由于它是指针向量,YES,因此对象的更改将在外部可见

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

void updateCursors(vector<cursor*>& cursors)
void更新游标(向量和游标)

还要注意的是,使用裸指针会带来糟糕的内存管理。如果可能的话,我建议您使用对象向量(
vector
),或者如果您确实有很好的理由使用指针,那么我建议您使用智能指针(
shared_ptr
,而不是
cursor*
)。这个问题可以帮助您:

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

vector<cursor*>& cursors
向量和游标
但不应该在向量中保留指针。建议的方法是保持可复制/可移动的对象-

vector<cursor>& cursors
向量和游标

您是想更改
std::vector本身,还是只更改元素?还是只更改元素的引用。在vector或任何其他容器中保留指针没有错,只要所有权和生命周期得到精心管理,尤其是在C++03中。是的,它们作为指针存在,因为它是动态分配的。