Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 赋值运算符,使用动态数组_C++_Operator Overloading_Operator Keyword_Dynamic Arrays - Fatal编程技术网

C++ 赋值运算符,使用动态数组

C++ 赋值运算符,使用动态数组,c++,operator-overloading,operator-keyword,dynamic-arrays,C++,Operator Overloading,Operator Keyword,Dynamic Arrays,我有一个指向对象的指针列表。我要做的是读取列表并将每个对象存储在该对象类型的动态数组中。所以我这样做: int size = List.size(); // find how many objects in the list ClassA* object = new ClassA[size]; // create a dynamic array int counter = 0; p = List.begin(); // iterator = begining of the list w

我有一个指向对象的指针列表。我要做的是读取列表并将每个对象存储在该对象类型的动态数组中。所以我这样做:

int size = List.size();  // find how many objects in the list
ClassA* object = new ClassA[size];   // create a dynamic array
int counter = 0;
p = List.begin();   // iterator = begining of the list
while( p != List.end() )
{
    object[counter] = (*p)->operator=(*(*p));
                // called like this as this function is in a separate class
    p++;
    counter++;
}
这似乎是我想要的,这意味着我需要赋值运算符,但我有点困惑,不知道应该在其中放入什么,我得到了堆栈溢出错误,下面是我认为我需要做的:

 ClassA ClassA::operator =(const ClassA& source)
 {
     ClassA* newObject;
     newObject = new ClassA;
     newObject = source;
     return newObject;

 }
这是一堆废话,我不知道,但在我的头脑中,这是我想要它做的,但我不完全理解我是如何实现它的

如果有人能帮助或建议一个更好的方法来实现我所需要的,将不胜感激


这样做的原因是存储在此列表中的对象通常会在每个帧中迭代并复制到临时对象中。但是列表在程序运行期间不会更改,这意味着我不需要复制每个帧,只需要在开始时复制一次。我需要一个动态数组,因为我不知道列表中将存储多少对象。

这可能是一个
操作符=
实现:

ClassA &ClassA::operator =(const ClassA& source) {
    // check for self-assignment
    if(this != &source) {
        // copy instance variables.
        a = source.a; // for example...
    }
    // assignment always returns the lvalue
    return *this;
}
我不知道您的
ClassA
的实例变量,所以您应该实现内部复制

另一方面,在迭代列表时,可以通过以下方式复制对象:

object[counter] = (**p);

(**p)
首先返回存储在迭代器中的指针,然后对其进行解引用。

列表中是否包含指针或实际对象?(即
list
list
)?抱歉,我应该说得更清楚,David Brown它包含一个指针列表,这意味着我必须复制实例的每个变量,假设该类有30多个变量,然后a=source.a b=source.b等等,你必须复制每个变量。无论如何,有一个默认的赋值操作符,它正好做到这一点。如果你的类在内部处理资源,比如指针、设备等,那么你应该只实现这个操作符。非常感谢Fontanii,如果你不介意的话,我不太明白,你能解释一下关于在内部处理资源的更多内容吗?我很高兴这对你有所帮助。您可以阅读这个stackoverflow线程,它解释了何时应该实现复制分配操作符和“三个规则”:非常感谢!!