C++ 分配给向量的对象的范围?

C++ 分配给向量的对象的范围?,c++,scope,undefined,C++,Scope,Undefined,在下面的代码中,请告诉我函数getObjects()中point对象的作用域是否有效。 我在createObj()中创建对象,所以对象“p”的作用域仅限于createObj()……vector是否使用复制构造函数处理此问题 void getObjects() { vector<point> vec; creatObj(vec); // getting correct output for object allocated in vector vec. } v

在下面的代码中,请告诉我函数getObjects()中point对象的作用域是否有效。 我在createObj()中创建对象,所以对象“p”的作用域仅限于createObj()……vector是否使用复制构造函数处理此问题

void getObjects()
{
    vector<point> vec;
    creatObj(vec);
    // getting correct output for object allocated in vector vec.
}

void createObj(vector<point> &vec)
{
    point p;
    p.x=10;
    p.y=20;
    vec.push_back(p);
}
void getObjects()
{
向量向量机;
创建对象j(vec);
//为向量向量中分配的对象获取正确的输出。
}
void createObj(向量和向量)
{
p点;
p、 x=10;
p、 y=20;
向量推回(p);
}

这一切都很好,因为
push_-back
调用
createObj
创建了一个副本。

这一切都很好,因为
push_-back
调用
createObj
创建了一个副本。

因为没有将指针传递到向量中,所以您是安全的。如果要传递指针,则需要确保指针指向的内容在需要时保持有效。

由于没有将指针传递到向量中,因此是安全的。如果要传入指针,则需要确保指针指向的内容在需要时保持有效。

我正在查看:。该网站提到“val的内容被复制(或移动)到新元素”。这里的移动是什么意思。我理解“复制”或“移动”的值在语义上不相同。如果它移动,则之前附加到它的所有指针都将无效?@amandepgautam See我正在查看:。该网站提到“val的内容被复制(或移动)到新元素”。这里的移动是什么意思。我理解“复制”或“移动”的值在语义上是不一样的。如果它移动,那么之前附加到它的所有指针都将无效?@AmandepGautam你的意思是说我是否在堆中分配点对象内存,并将指针存储在向量对象中。我猜它仍然有效,如果我不删除在向量中分配的对象??是的,堆中的对象在函数调用终止后将保留其内容,并且指向它们的指针(您复制到向量中的指针)仍然是有效指针,因为这一点(当然,直到您删除对象为止)。即使删除对象x(取输入点*p=new point())。。。。。。现在删除后,如果我迭代向量..它会给我带来任何麻烦吗???。。。如果是,那么如何避免对向量的内容进行迭代将不会直接成为问题,但使用不再有效的指针将是问题!)。为了避免这种情况,您可能不希望直接分配新对象,而是提供自己的函数。。。一个是“分配并推送到矢量”,另一个是“从矢量中删除并删除”。如果你不能这样做,那么你必须非常小心。一些语言/运行时(如ObjvEC)使你更容易,但是C++需要你多加小心。@马赫:不,C++也为你做了。使用智能指针,而不是
new
/
delete
。您的意思是说我是否在堆中分配点对象内存,并将指针存储在向量对象中。我猜它仍然有效,如果我不删除在向量中分配的对象??是的,堆中的对象在函数调用终止后将保留其内容,并且指向它们的指针(您复制到向量中的指针)仍然是有效指针,因为这一点(当然,直到您删除对象为止)。即使删除对象x(取输入点*p=new point())。。。。。。现在删除后,如果我迭代向量..它会给我带来任何麻烦吗???。。。如果是,那么如何避免对向量的内容进行迭代将不会直接成为问题,但使用不再有效的指针将是问题!)。为了避免这种情况,您可能不希望直接分配新对象,而是提供自己的函数。。。一个是“分配并推送到矢量”,另一个是“从矢量中删除并删除”。如果你不能这样做,那么你必须非常小心。一些语言/运行时(如ObjvEC)使你更容易,但是C++需要你多加小心。@马赫:不,C++也为你做了。使用智能指针,而不是
new
/
delete
。未获取该指针。请举例说明抱歉,我的错误。我以为这个参数是由于某种原因被推到向量上的。没有得到它。请举例说明对不起,我的错。我认为这个参数是由于某种原因被推到向量上的。