[英]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.