我有 classA ,其向量< classB *> VOBJECT
class ClassA{
public:
ClassB** operator [] (int index);
private:
vector<ClassB*> vObject
};
让我们假设vObject充满了一些classB *对象。 我想要做的是能够像这样替换vector的classB *元素:
classA_obj[3] = classA_obj[5];
classA_obj[1] = classB_obj;
我试图返回ClassB Element的指针。 这是我当前的运营商实施:
ClassB** ClassA::operator [](int index){
return &vObject[index]; }
之后我尝试了以下内容:
*classA_obj[3] = *classA_obj[5]
使用矢量完成所有工作的代码将是:
vector<ClassB*> vObject;
vObject.push_back(new ClassB(ARG1,ARG2));
vObject.push_back(new ClassB(ARG1,ARG2));
vObject[0] = vObject[1];
我对此感到困惑,我认为我的代码是正确的,但实际上它不起作用。如果有人能告诉我我做错了什么,我会很高兴。
以上代码只是我实际代码的一个示例。
答案 0 :(得分:2)
如果您返回参考,您将能够进行所要求的替换。
class ClassA{
public:
ClassB*& operator [] (int index) { return vObject[index]; }
private:
std::vector<ClassB*> vObject
};
但是,您描述用法的方式似乎表明您可以轻松更改向量以保留ClassB
个对象而不是指针。
class ClassA{
public:
ClassB& operator [] (int index) { return vObject[index]; }
private:
std::vector<ClassB> vObject
};
然后,您只需按new ClassB
:
ClassB
推送到向量中
vObject.push_back(ClassB(ARG1,ARG2));
vObject.push_back(ClassB(ARG1,ARG2));
这样做的好处是您无需显式访问容器来删除指针。否则,您需要更新ClassA
以遵守rule of three。
答案 1 :(得分:0)
普通的std::vector
会返回一个引用,所以你应该尝试一下:
ClassB*& ClassA::operator [](int index)
{
return vObject[index];
}
答案 2 :(得分:0)
In the definition:
class A {
public:
ClassB*& operator [] (int index) { return vObject.at(index); };
private:
vector<ClassB*> vObject;
}
这是inline function
,没有别的事可做。但是,我会检查index
只是为了理智。