C ++拷贝构造函数采用错误的值

时间:2013-10-14 02:45:43

标签: c++ parameters constructor copy

我正在尝试将我的数组调整为更大的数组,但是当我尝试这样做时,我会为我的类调用复制构造函数。由于某种原因,它为传递的参数提供了错误的值。任何帮助,将不胜感激。

    // ---------------------------------------------------------------------------
    // Copy
    // Copy constructor for class Array
    IntSet::IntSet(const IntSet &init) {
        cout << "IN COPY CONSTRUCTOR FOR: " << init << endl;
        size = init.size;
        count = init.count;

        arr = new bool[size];


        for (int i  = 0; i < size; i++) {
            arr[i] = init.arr[i];
        }
    }
bool IntSet::insert(int value) {
    if(check(value)) {
        cout << "START OF INSERT:       " << *this << "    VALUE: " << value << endl;
        if(value >= size) {
            cout << "INSIDE IF      " << endl;
            size = value + 1;

            IntSet(*this);  
        }

        cout << "AFTER VALUE >= SIZE        " << *this << endl;
        arr[value] = true;
        count++;
        cout << "         AFTER ADDING:      " << *this << " COUNT: " << count << endl;

        return true;
    }
    return false;
}

我在整个代码中编写了调试打印,这里是一个片段。

A = {}
Enter ints for set A:  
9
START OF INSERT:       {}    VALUE: 9
INSIDE IF      
IN COPY CONSTRUCTOR FOR: { 2 4 5 9}
IN DESTRUCTOR!!! FOR { 2 4 5 9}
AFTER VALUE >= SIZE        { 2 4 5 9}
               AFTER ADDING:      { 2 4 5 9} COUNT: 1
2
START OF INSERT:       { 2 4 5 9}    VALUE: 2
AFTER VALUE >= SIZE        { 2 4 5 9}
               AFTER ADDING:      { 2 4 5 9} COUNT: 2
1
START OF INSERT:       { 2 4 5 9}    VALUE: 1
AFTER VALUE >= SIZE        { 2 4 5 9}
               AFTER ADDING:      { 1 2 4 5 9} COUNT: 3
-1
A = { 1 2 4 5 9}
IN DESTRUCTOR!!! FOR {}
IN DESTRUCTOR!!! FOR { 1 2 4 5 9}

编辑:为了解释这个程序的作用,它是一个试图在bools数组中存储int的程序。

1 个答案:

答案 0 :(得分:1)

IntSet(*this);

此行不符合您的要求。它正在做的是创建一个临时的IntSet,然后立即销毁。您不能使用这样的复制构造函数来更改this表示的当前对象。您需要手动更改字段。或者,作为替代方案,查找副本和交换习语。