繁体   English   中英

在C ++中相同类型的向量中使用类的构造函数

[英]Using a class' constructor within a vector of the same type in C++

考虑:

MyClass {
    //constructor
    MyClass()
    {}
.
.
.
};

然后,定义相同类型的向量

int main()
{
.
.
    vector<MyClass>myVector(12);
.
.

可以吗?

for(int i = 0; i < myVector.size(); i++)
{
    //an attempt to fill my vector with initialized MyClass objects.
    myVector[i] = MyClass(); //Calling constructor
}

或:(在未定义向量大小的情况下)

for(int i = 0; i < whatever; i++)
{
    //an attempt to fill my vector with initialized MyClass objects.
    myVector.push_back(MyClass()); //Calling constructor
}

如果不允许这样做,初始化类实例并将其存储在向量中而不使用指针的替代方法是什么? 有这样的事吗?

您写的所有内容都是可以接受的。

vector<MyClass>myVector(12);

将调用MyClass默认构造函数12次。 所以这相当于

vector<MyClass>myVector;
for(int i = 0; i < 12; i++)
{
    myVector.push_back(MyClass());
}

您提供的另一个变体略有不同

for(int i = 0; i < myVector.size(); i++)
{
    myVector[i] = MyClass();
}

在这里,向量的每个元素都已经以某种方式初始化。 因此,当您执行此操作时,将删除MyClass先前实例(将调用析构函数),并将元素分配给新实例。

如果需要将默认构造函数设为私有并使用一些值初始化类,则必须使用下一个方法:

vector<MyClass>myVector(12, MyClass(some_value));

或如你所见

vector<MyClass>myVector;
for(int i = 0; i < 12; i++)
{
    myVector.push_back(MyClass(some_value));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM