我有一个classA,它有一个vector< classB* > vObject。
class ClassA{
public:
ClassB** operator [] (int index);
private:
vector<ClassB*> vObject
};让我们假设vObject中填充了一些classB*对象。我想要做的是能够替换B类*向量的元素,比如:
classA_obj[3] = classA_obj[5];
classA_obj[1] = classB_obj;我试图返回ClassB元素的指针。下面是我当前的操作符实现:
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];我真的很困惑,我认为我的代码是正确的,但它实际上不起作用。如果有人能告诉我我做错了什么,我会很高兴的。
上面的代码只是我实际代码的一个示例。
发布于 2012-08-09 14:00:16
如果您返回一个引用,您将能够完成所要求的替换。
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。
发布于 2012-08-09 14:01:36
普通的std::vector返回一个引用,所以您应该尝试这样做:
ClassB*& ClassA::operator [](int index)
{
return vObject[index];
} 发布于 2012-08-09 14:03:17
In the definition:
class A {
public:
ClassB*& operator [] (int index) { return vObject.at(index); };
private:
vector<ClassB*> vObject;
}这是一个inline function,没什么可做的。然而,我会检查index仅仅是为了保持理智。
https://stackoverflow.com/questions/11885133
复制相似问题