假设我的函数有像这样传递的数组:
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
甚至可以从类中引用非对象吗?如何让我的参考数组更改源数组?我之前在该函数中将引用数组作为非对象,一切正常。不,我不能 将它留在那里 。
答案 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
而不是手动执行所有内存管理。