我正在更深入地学习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)。这样够了吗?