c++ - 填充指针 vector

标签 c++ pointers vector

请原谅我的菜鸟问题..

我有:

class A;
{
    public:
    A(int i) : m_i(i) {}
    int m_i;
}

A newA(i);
{
    return A(i);
}

我想填充以下 vector ,但使用一个循环,其中使用函数 (newA) 创建对象 A:

vector<A*> list;

for (int i=0 ; i<3; ++i) {  A a = newA(i);  list.push_back(&a); }

如果我使用 vector<A> 就可以了但不是 vector<A*>因为我所做的只是更改 &a 处的值并将同一指针 &a 推 3 次。

我该怎么做才能每次都创建一个新的 A,而不更改同一个指针的值。

我想出了以下方法,但我希望这不是唯一的方法,因为它包含动态分配......

A newA(i);
{
    return A(i);
}

vector<A*> list;

for (int i=0 ; i<3; ++i)
{
    A a = newA(i);
    list.push_back(new A(a));
}

请注意,A 类的内存实际上很大,因此有指针。

最佳答案

你应该意识到第一种方法是不好的:

 for (int i=0 ; i<3; ++i) {  A a = newA(i);  list.push_back(&a); }

您正在创建一个本地对象,然后存储一个指向它的指针。一旦你离开循环,该对象将不再存在,并且你有未定义的行为。正如约翰所说,如果不使用动态分配,就没有明智的方法来做你想做的事。正如 Billy 指出的,您可以使用 shared_ptrunique_ptr 而不是使用原始指针,然后您不必担心内存管理,这可能是您要避免的原因动态分配。

关于c++ - 填充指针 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16042899/

相关文章:

c++ - 使用带嵌套 vector 的迭代器的意外行为

c++ - 异常的复杂性

c++ - OpenGL 缓冲区的状态如何在程序运行之间保持不变?

c - C程序中的数组指针

c - 如何用C实现多节点链表?

c++ - 我应该使用元组 vector 还是数组 vector ?

c++ - 用随机数填充 vector c++

c++ - XCode C++ 缺少精子 ()

c++ - CRTP : returning a reference to the derived class?

C - 为什么在进行指针运算时转换为 uintptr_t 与 char*