我喜歡與給定的規模和價值創造的載體,例如像這樣:我如何初始化一個std :: vector大小參數,並讓每個對象獨立構造?
std::vector<std::string> names(10);
然而,這幾次這導致了意想不到的結果。例如在下面的代碼每個UniqueNumber
原來具有相同的價值:
#include <iostream>
#include <string>
#include <vector>
struct UniqueNumber
{
UniqueNumber() : mValue(sInstanceCount++)
{
}
inline unsigned int value() const
{
return mValue;
}
private:
static unsigned int sInstanceCount;
unsigned int mValue;
};
int UniqueNumber::sInstanceCount(0);
int main()
{
std::vector<UniqueNumber> numbers(10);
for (size_t i = 0; i < numbers.size(); ++i)
{
std::cout << numbers[i].value() << " ";
}
}
控制檯輸出:
explicit vector(size_type __n,
const value_type& __value = value_type(),
const allocator_type& __a = allocator_type());
:
0 0 0 0 0 0 0 0 0 0
看的std :: vector的構造函數時,它有一定道理
顯然,矢量是用相同對象的副本初始化的。
是否還有一種方法讓每個對象默認構造?
感謝您提供非侵入式解決方案。 – StackedCrooked
@StackedCrooked,實際上它是侵入性的,我寧願使用'make_foo'的對象,它會好得多。 –