如何访问由当前函数范围创建的动态创建的对象?

时间:2012-06-07 07:35:54

标签: c++ exception object pointers dynamic

我想将未初始化的对象指针传递给某个方法。在该方法中,我将使用new运算符(或malloc)创建对象的实例,并将其地址分配给传递的指针。这是我的代码的一部分:

void test(testClass* t){
    ...
    t = new testClass();
    ...
}

int _tmain(int argc, _TCHAR* argv[])
{
    testClass* t = NULL;
    test(t);
    cout<<t->getTestValue()<<endl;
    delete t;
}

我的问题出在_tmain函数(调用test之后),我想调用getTestValue指向的对象的t方法。在这里,我的程序崩溃并终止,存在访问冲突意外异常。

似乎动态创建的对象(使用运算符new甚至malloc)不可用于函数test的范围。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

要更改函数中的指针,必须通过引用传递:

void test(testClass*& t)

否则,在功能内部进行的更改在外部不可见。

您的原始指针不会更改,仍为NULL,因此会遇到未定义的行为并导致崩溃。

每当您按值传递参数时,都会在函数内部进行复制。因此,当您执行t = new testClass();时,您实际上正在处理指针的副本