使用boost :: make_shared创建向量元素无法正常工作

时间:2014-05-16 23:39:50

标签: c++ boost shared-ptr

我要创建大量对象,它们都将存储在一个特定的向量中。所以我这样做了:

std::vector<boost::shared_ptr<MyClass>> t;
t.resize(5000);

然后我编写了一个脚本来生成用于创建所有5000个对象的C ++:

t[0] = boost::make_shared<MyClass>(4659);

t[1] = boost::make_shared<MyClass>(45029);

t[2] = boost::make_shared<MyClass>(2731);
.
.
t[4999]....

然而,在最后我循环,似乎我没有正确构造对象:

for(boost::shared_ptr<MyClass> s : t){
    //I cannot see the data members for s when debugging here
    s->doSomething(x);
}

似乎s未实例化。

我是否误用了boost::make_shared而我实际上并没有创建对象?

1 个答案:

答案 0 :(得分:2)

您不需要为此生成C ++代码。举个例子,您应该只生成一个包含整数的文本文件来构造项目,然后执行以下操作:

vector<shared_ptr<MyClass>> t;
for (int x; cin >> x; ) {
    t.push_back(make_shared<MyClass>(x));
}

当然,您可以使用任何istream而不是cin

如果你这样做,我保证你的载体中不会有任何“缺失”元素。