gpt4 book ai didi

c++ - 在对象 vector 中添加指针

转载 作者:行者123 更新时间:2023-11-30 03:25:08 27 4
gpt4 key购买 nike

我试图掌握 C++ 中的指针,但找不到这些问题的答案。

如果我在 Java 中有一个 ArrayList,并且我想在一个循环中向它添加新的对象,我会做类似的事情:

ArrayList<MyObject> list = new ArrayList<MyObject> ();

for (int i = 0; i < otherList.length; i++) {
list.add(i, new MyObject(otherList.get(i)));
}

但假设我想在 C++ 中使用 vector 做同样的事情。我找到了两种方法:

vector<MyObject> vector;

for (auto i = otherVector.begin(); i != otherVector.end(); i++) {
// do this
vector[i - otherVector.begin()] = * new MyObject(*i);

// or this
MyObject newObj(*i);
vector[i - otherVector.begin()] = newObj;
}

这两种方法有什么区别,如果我使用第二种方法,我是否需要手动从列表中删除指针?如果我对智能指针使用第二种方法,当 vector 不再使用时,它们会被 gc 自动删除吗?

最佳答案

第一种方法会造成内存泄漏。没救了。忘记你曾经听说过运算符 new 吧。

if I use the second one, do I need to manually delete the pointers from the list?

列表中没有指针。

第二个可以工作,当 vector 超出范围时,它会自行清理。但也不要那样做。

vector<MyObject> vector;

for (auto i = otherVector.begin(); i != otherVector.end(); i++) {
// do this
vector[i - otherVector.begin()] = * new MyObject(*i); // No, no, no, no.

// or this
MyObject newObj(*i);
vector[i - otherVector.begin()] = newObj; // Please don't.
}

但这里有一种方法可以做到。没有循环。 (并且不要将事物命名为“vector ”。)

std::vector<my_object> vec(other_vector);

如果您真的很喜欢简洁,请执行以下操作:

auto vec{other_vector};

关于c++ - 在对象 vector 中添加指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49204733/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com