从类引用非对象数组

时间:2013-10-28 22:59:44

标签: c++ reference

假设我的函数有像这样传递的数组:

int someFunction ( SomeClass * const * array, int arr_size ) { }

这是一些结构的数组:

struct SomeStruct {
   int value;
   int value2;
};

我想要实现的是在该函数中声明的对象内部进行引用:

int someFunction ( SomeStruct * const * array, int arr_size )
{
   NewClass newclass (array, arr_size);
}

我的构造函数看起来像这样:

Newclass::NewClass( SomeStruct * const * array, int arr_size )
{
   SomeStruct ** myReference = new SomeStruct * [arr_size];
   for (int i = 0; i < arr_size; ++i)
   {
      myReference[i] = array[i];
   }

   myReference[0] -> value = 10;
}

现在,如果我想打印出数组中第一个元素的值,我只得到零。

int someFunction ( SomeStruct * const * array, int arr_size )
{
   NewClass newclass (array, arr_size);

   cout << array[0] -> value << endl;
}

输出:

0

甚至可以从类中引用非对象吗?如何让我的参考数组更改源数组?我之前在该函数中将引用数组作为非对象,一切正常。不,我不能 将它留在那里

1 个答案:

答案 0 :(得分:0)

当您在Newclass::NewClass()中分配结构指针时,您忘记实际初始化那些指向实际结构的指针。

你需要:

Newclass::NewClass(SomeStruct* const* array, int arr_size)
{
    SomeStruct** myReference = new SomeStruct*[arr_size];
    for (int i = 0; i < arr_size; ++i) {
        myReference[i] = array[i];
    }
    myReference[0]->value = 10;
}

虽然我必须说我对所有指针间接都很困惑,为什么你需要它。你也在泄漏记忆;你永远不会delete[] myReference

您应该考虑使用std::vector而不是手动执行所有内存管理。