在对象向量中添加指针



我试图掌握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<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;
}

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

第一种方法会创建内存泄漏。无法保存它。 忘记你听说过操作员new.

如果我使用第二个,是否需要从列表中手动删除指针?

列表中没有指针。

第二个会起作用,当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.
}

但这是应该做的一种方法。无循环。(并且不要将事物命名为"矢量"。

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

如果您真的喜欢简洁的事情,请这样做:

auto vec{other_vector};

最新更新