请原谅我的菜鸟问题..
我有:
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_ptr
或 unique_ptr
而不是使用原始指针,然后您不必担心内存管理,这可能是您要避免的原因动态分配。
关于c++ - 填充指针 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16042899/