请原谅我的问题。

我有 :

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

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

我想填充以下向量,但要使用一个循环,在该循环中使用函数(newA)创建对象A:

vector<A*> list;

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

该工程如果我使用一个vector<A>但不与一个vector<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类实际上在内存中非常大,因此是指针。

===============>>#1 票数:4 已采纳

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

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

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

===============>>#2 票数:1

存储指针向量不会赋予A的所得实例向量所有权。 为了填充这种结构,将涉及动态分配。

(当然,在实际代码中,您可能应该创建vector<unique_ptr<T>>vector<shared_ptr<T>>而不是vector<T*>但这是另一个主题)

===============>>#3 票数:0

这是唯一的方法,因为在第一个示例中,存储指针所指向的对象会在for循环的每次迭代中立即消失,因为它超出了范围。

  ask by user2287453 translate from so

未解决问题?本站智能推荐:

4回复

填充指向向量的指针的向量会产生奇怪的结果

介绍 我有一个代码,其中我用integer数值填充向量,然后将其推入指向向量的指针的向量,如下所示: 问题是输出确实很奇怪。 输出应等于 但是相反,我得到以下输出: 完整的源代码
2回复

如何使用指针使用对象填充向量

我有一个作业,我必须创建一个向量并将其填充对象。 我发现此代码: 我知道第一行会创建一个名为v的指针,该指针为空并指向对象Vehicle 。 您能否向我解释其他两行的工作原理,以及为什么在创建矢量时使用指针?
1回复

在构造函数中填充类指针的向量

我看过其他关于向量指向类对象指针的文章。 但是,是否可以使用“ this”指针在同一类的构造函数中填充此向量? 我收到一个链接器错误。 我离基地远吗?:
4回复

指针向量

我试图从文件中读取数据,从数据中创建评论者,然后创建指向每个评论者的指针向量。 在我阅读了第一个评论家的数据并将其设置为“批评”之后, 然后我尝试将它们打印出来。 但是,每次将指针向后推时,所有指针都指向同一评论家。
4回复

通过指针向量的指针...不,不?

C ++的新手,它给我带来了嘶哑的感觉。 实际的代码在另一台计算机上,我无法复制它,因此,我将尽最大努力使用伪代码。 我的最终结果是要有一个[指针]向量,可以由几个不同的对象访问。 我尝试解决此问题的方法是使包含向量的原始类具有类似于以下内容的方法: 因此,我的各个类最终都
2回复

向量中的指针

我的问题是将内存释放吗?
2回复

多维向量和向量指针

我正在尝试将指向矢量的指针存储在矢量中。 (我希望那不是太令人困惑了)。 基本上,我有一个向量,我想在其中存储多个矩阵,因此是3维。 我访问元素的方式似乎有问题。 我没有特别理解该错误,因为第3维是指向ints向量的指针。 我认为这不会改变您访问int的方式。 main.cpp
2回复

指向指针向量的向量

在我的框架类中,我声明了这个向量: std::vector<sf::Drawable*> drawableStack; 当drawableStack全部填满时,我想在这样的循环中绘制所有对象: window在头文件sf::RenderWindow* window; 并
3回复

向量和迭代器的向量上的指针

我有一个对象向量的向量,并且得到了这个向量的指针。 我的问题是我不能用它创建一个迭代器。 这是我的代码: 它在vectorMap [colonneX-1] .begin()上失败,如果vectorMap不是指针,我可以这样做 我该怎么做? 谢谢!
3回复

指针而不是对象的向量

每次将对象放入std :: vector时,都必须复制该对象。 那么我可以只放置指针而不是像这样的对象吗?: 还是由于某种原因,这不是一个好主意?