我得到了以下代码,其中在一个循环中创建了100个对象。
我的问题是
new
,因为我已经事先知道我需要多少内存。 vector
之类的std容器)(...类+动态苦苦在一起变得令人困惑)示例代码:
class Particle {...};
Particle *myParticles[ 100 ];
for( int i = 0; i < 100; i++ )
{
myParticles[ i ] = new Particle(x,y); //x and y are randomized for each loop
}
[更新]:
class Particle
没有默认的构造函数。因此,Particle myParticles[ 100 ];
将不起作用。请注意,可以通过以下方法来解决:设置默认的构造函数,然后创建方法Particle::setXY (double x, double y)
。但是有没有一种方法可以解决此问题而无需创建新方法?即仅使用构造函数,并且没有动态内存分配。
我只是觉得很奇怪,没有动态内存分配就无法做到这一点。还是我必须接受这仅仅是C++语言的怪癖?
最佳答案
您不必使用new
。您可以按照自己的建议创建一个Particle
数组:
Particle myParticles[100];
事实是,它将是默认构造的,因为您无法指定仅在运行时可用的
(x,y)
参数。因此,您必须提供一种方法来构造Particle
后指定此信息,例如:for( int i = 0; i < 100; i++ )
{
myParticles[i].SetCoords(x,y); //x and y are randomized for each loop
}
这需要
Particle
的默认构造函数和SetCoords
之类的方法来在构造后配置实例。因此,如果Particle
的代码超出您的控制范围,则可能不是一个选择。但是我真的会考虑使用
vector
,因为这是非常方便和有用的事情。如果编程正确,它将使用很少的动态分配,因此效率很高。例如:vector<Particle> myParticles;
myParticles.reserve(100);
for( int i = 0; i < 100; i++ )
{
myParticles.push_back(Particle(x,y)); //x and y are randomized for each loop
}
这应该只使用一个分配。假设
Particle
相当轻巧,可以由复制构造函数复制。关于c++ - 如何在没有动态内存分配的情况下创建对象数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15966801/