如何在自定义类中正确使用std :: vector <>

时间:2019-06-01 13:41:59

标签: c++ vector stl

我正在更深入地学习C ++。在学习C ++资源分配的过程中,他试图学习如何正确地使用std :: vector类。

#include <iostream>
#include <vector>
using namespace std;

//

class Car
{
    string* _name;

public:

    Car(string name="Safari") 
    {
        _name = new string(name);
        cout<<*_name<<" car is build"<<endl;
    }

    void drive()
    {
        cout<<*_name<<" is getting driven"<<endl;
    }

  //  ~Car()
  //  {
  //      delete _name;
  //  }

   // Car(const Car& rhs) = delete;
};



int main()
{
    vector<Car> garage;
    garage.push_back(Car("Honda"));
    garage.back().drive();
}

问题1:在此程序中,我将自定义对象插入到vector中。我以为该程序在访问向量内容的drive()时应该崩溃,因为在这种情况下,应该将临时对象插入向量中,而应该在push_back()之后释放该对象,但这不是这种情况。 / p>

但是,如果我尝试释放析构函数中的指针,但是在那种情况下,将数据插入向量中的push_back()后崩溃。谁能解释这是怎么回事?

问题2:根据我所学到的知识,应该删除复制和赋值运算符以停止这种行为,并在STL中使用指针(向量或shared_ptr)。这样够了吗?

0 个答案:

没有答案