c++ - 向其添加单独对象后所有相同对象的对象 vector

标签 c++ vector

因此,我将一堆对象添加到我的类中的 vector 中。我可以添加所有内容,或者看起来很好,但是当我去打印 vector 的内容时,所有内容都是我添加的最后一个对象。这是为什么?这是我添加时的样子

this->packages.push_back(mc);

这是我调用要打印的对象时的样子

std::cout << truck.packages[1]->getTrack() << endl;

我不确定我做错了什么, vector 在添加和删除项目时似乎非常直接。

如果我需要添加任何其他内容,请告诉我。

  std::cout << truck.packages[1]->getTrack() << endl;
  std::cout << truck.packages[2]->getTrack() << endl;

Output: 11111 11111

这就是我创建对象的方式

if(type == 0){
  Letter *letter = new Letter();
  letter->setType("Letter");
  letter->setWeight(weight);
  letter->setTrack(track);
  price = letter->cost();
  letter->setPrice(price);

  this->packages.push_back(letter);

  truckWeight = this->getGross() + (weight / 16);
  this->setGross(truckWeight);

  this->numPackages++;

  delete letter;

这是 letter.cpp

Letter::Letter()
{
  this->type = "Letter";
  this->price = 0.0;
  this->weight = 0;
  this->trackingNumber = 0;
}

double Letter::cost()
{
  int weight = this->getWeight();
  if(weight > 32)
    return 0.0;
  else
    return (0.5 * weight);
}

这是 letter.h

class Letter: public Package{`enter code here`

public:
  Letter();

  double cost();
};

用 Letter 制作。我使用哪个对象并不重要。他们都做同样的事情

最佳答案

您的代码中有 UB。你有一个 vectorLetter*秒。当你push_back这些Letter* s, vector 只是复制这些指针。一旦您调用 delete在原来的Letter* ,这些 vector 元素现在是悬空的。您可以通过两种方式处理此问题:

  1. 制作package一个vector<Letter>而不是 vector<Letter*> .现在,你开心就好push_back (或者,最好是 emplace_back )Letter s.
  2. 如果必须使用指针,请使用 unique_ptr (或其他一些智能指针)。所以,package将是 vector<unique_ptr> .当 vector 被破坏时,unique_ptr s 将负责内存释放。

如果你不想使用智能指针,你将不得不管理 delete是你自己。所以,如果 packageMyAwesomePackage 的成员(没有双关语意),你会在析构函数中这样做:

MyAwesomePackage::~MyAwesomePackage()
{
///Other destruction
for(auto * letter : package)
  delete letter;
}

关于c++ - 向其添加单独对象后所有相同对象的对象 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25091961/

相关文章:

c++ - 从均匀网格中找到最接近的数字

C++ 标准 :vector< T* const>

r - R 中是否有 as.numeric(as.character(my.factor)) 的简短替代方案?

c++ - 在 C++ 中重新声明变量是否有任何成本?

带方法的 C++ 结构,不带方法的 C 声明

c++ - Matlab Engine 命令窗口中的 "??? Undefined function or method"

c++ - 为什么与花括号分隔的初始化程序一起使用的缩小转换不会导致错误?

c++ - 对象指针的 vector 在 C++ 中似乎没有按预期执行

c++ - 为什么真陈述是假的?

c++ - 返回引用后数据被删除