我首先从向量中获取对象A,然后我调用erase方法来销毁向量中的对象,因为我不再需要它了。但是,从调试器中,我发现在调用erase方法之前得到的对象A也被破坏了。我不明白,因为我认为我得到的是该对象的副本,擦除方法应该与我的对象A无关。
代码
班级单位
标头文件
#ifndef UNIT_H
#define UNIT_H
#include <iostream>
class Unit
{
protected:
int id;
public:
Unit::Unit(int num = -1);
virtual ~Unit() = default;
virtual int getID();
};
#endif
CPP文件
#include "Unit.h"
Unit::Unit(int num)
{
id = num;
}
int Unit::getID()
{
return id;
}
Class Box
标头文件
#ifndef BOX_H
#define BOX_H
#include <string>
#include <iostream>
#include "Unit.h"
class Box : public Unit
{
private:
std::string* type;
int* val;
public:
Box::Box();
~Box();
int getVal();
std::string getName();
int getID() override;
};
#endif
CPP文件
#include <time.h>
#include "Box.h"
Box::Box() : Unit(5)
{
int tmp = rand() % 3;
if (tmp == 0)
{
type = new std::string("hp"); // health cur
val = new int(rand() % 10 + 1);
}
else if (tmp == 1)
{
type = new std::string("exp"); // skill level or health max
val = new int(rand() % 5 + 1);
}
else
{
type = new std::string("punish"); // minus health cur
val = new int(-1);
}
}
Box::~Box()
{
delete type;
delete val;
}
int Box::getVal()
{
return *val;
}
std::string Box::getName()
{
return *type;
}
int Box::getID()
{
return id;
}
主档
using namespace std;
int main()
{
Box test;
std::vector<Box> bag;
bag.push_back(test);
Box tmp = bag[0];
bag.erase(bag.begin() + 0);
cout << tmp.getVal();
system("pause");
return 0;
}
下面是调试器的屏幕截图,因为我没有10个声誉,我无法直接显示它。
如您所见,&#34;类型&#34;和&#34; val&#34;类Box的数据成员被修改。
答案 0 :(得分:0)
从索引调用中查看此页面的返回类型
http://en.cppreference.com/w/cpp/container/vector/operator_at
我相信你可能有一个参考,而不是一个不同的对象。