class A{
Add(const B&);
vector <B*> vect;
};
A & A::Add(const B& obj){
vect.push_back(&obj);
return *this;
}
这里我得到了错误的错误,因为push_back的参数是不变的,我该如何摆脱这个?
我尝试在添加中创建本地副本,例如
B tmp;
tmp = obj;
vect.push_back(&tmp);
但是我不确定这个,因为程序跳出这个方法添加,tmp被破坏了,向量中的地址会指向内存中的无效位置吗?
答案 0 :(得分:3)
您的问题源于API不一致。这里有2个选项:
const
:Add
Add(B&)
const B*
个指针:vector<const B*> vect;
第一个选项将允许修改对象的内容,而第二个选项将禁止它。选择取决于您的程序逻辑。
答案 1 :(得分:1)
你的问题是,如果你提供一个const引用作为Add的函数参数,你告诉编译器你传递的任何内容永远不会被改变为该函数的效果。 另一方面,您尝试在向量中存储非const指针,这意味着允许该向量的用户更改与该指针相关的值。 要摆脱错误,您必须确定您的程序实际需要的行为类型: 如果你想存储对你的&#34; B&#34;然后你必须将它们作为const指针存储在向量中。如果您希望该向量的用户能够使用B的非const函数,即更改B,则必须将其作为非const引用传递给Add函数。