取消引用 boost::p tr_vector

Dereferencing a boost::ptr_vector

本文关键字:vector tr boost 取消 引用      更新时间:2023-10-16

所以现在我有以下内容:

        boost::ptr_vector <Customer> cvect;
         ifstream cDbase("datafiles/customers.txt");
        while (cDbase.good())
        {
            while (!cDbase.eof())
            {
                cDbase >> newCust;
                Customer* c = &newCust;
                cvect.push_back(c);
            }
        }

        for (unsigned int loop = 0; loop < cvect.size(); loop++)
            {   
                cout << cvect[loop];
            }

当我尝试打印客户详细信息时,它会打印出空白行。如何正确取消引用ptr_vector?

Boost 指针容器适用于拥有动态分配对象的容器。因此,要按预期使用它,您需要这样做:

while (cDbase >> newCust) {
  cvect.push_back(new Customer(newCust));
}

(注意:永远不要循环eof())。

但是,您真的需要动态存储它们吗?简单来说,这怎么样:

std::vector<Customer> cvect;
ifstream cDbase("datafiles/customers.txt");
while (cDbase >> newCust) {
  cvect.push_back(newCust);
}

如果newCust是局部变量,则将指向局部变量的指针推送到向量中,这将不起作用。

相反,您必须每次通过循环创建一个新对象。一个简单的解决方案如下所示:

while (cDbase >> newCust)
    cvect.push_back(new Customer(newCust));

这可能需要您有一个适当的复制构造函数。