c ++重载操作符动态和静态数组

时间:2013-10-17 17:02:57

标签: c++ arrays pointers

我的类有私有数组和指针。我有3个构造函数,一个是复制构造函数,它将指向数组的指针作为参数。我正在重载运算符,例如<< ,ostream。当我将指向静态数组的指针传递给我的类时,我的程序工作正常。但是当我开始使用动态数组时,我的函数操作很奇怪并输出一些疯狂的数据。我应该在程序中做出什么样的差异,以便运算符可以同时使用静态和动态数组?我有一个单独的函数创建动态数组random()和返回指针,我作为参数传递。这是我的代码

2 个答案:

答案 0 :(得分:0)

假设ptrHugeInteger类中的成员,您有几个未定义行为的情况。

对于默认构造函数,您使ptr指向本地数组。与所有局部变量一样,此数组的范围仅在其声明的函数中。因此,当默认构造函数返回成员变量ptr时,“悬空”。

对于复制构造函数,您不会分配ptr可以指向的内存。因此,在索引它时,您正在索引未定义的内存位置。


至于你的问题,它与默认构造函数基本相同。您指定pointer指向本地数组arr。当函数返回时,数组不再存在,因此指针指向未使用的内存,并且其他函数可能已使用该指针。此外,你在那里做的是创建动态数组,这将涉及使用new分配内存。

答案 1 :(得分:0)

int * pointer;
int arr[40]={0};
pointer = arr;

指针将是一个40字节的数组。此数组不是动态分配的,将在函数末尾完全删除。将您的功能更改为:

int* random()
{
    int * pointer = new int[40];
    cout << "Random function: ";
    for(int j = 0; j < 40; j++){
        pointer[j] = rand()%10; cout << pointer[j];
    }
    cout << endl;
    return pointer;
}

这样你就可以保留指针的值,你可以在其他函数中使用它们。