You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中能否在void函数内实例化对象并修改外部指针?

如何在C++中用void函数修改指针指向?

嘿,我太懂你踩的这个C++坑了!你写的这段代码里,instantiate函数拿到的只是指针t的副本——说白了就是函数自己搞了个临时指针,和主函数里的t根本不是同一个东西,所以函数里给副本分配内存,主函数里的原指针当然还是NULL。不过别担心,有两种完美满足你要求的办法,而且都能用void函数实现:

方法1:传递指针的指针(双重指针)

既然要修改指针本身,那我们就得把指针的地址传进去,让函数能直接操作原指针的存储位置:

void instantiate(myType** t) {
    *t = new myType(); // 解引用到原指针的地址,修改它的指向
}

int main() {
    myType* t = NULL;
    // ...
    instantiate(&t); // 传递指针的地址
    // ...
    if (t != NULL) {
        // do something
    }
    delete t; // 别忘了释放内存,避免泄漏!
}

这样函数里的*t就是主函数中t的真身,分配内存后原指针自然就指向新创建的对象了。

方法2:传递指针的引用

C++的引用特性比双重指针更直观,它相当于变量的“别名”,函数里对引用的操作就是直接操作原变量:

void instantiate(myType*& t) { // 这里声明的是指针的引用
    t = new myType();
}

int main() {
    myType* t = NULL;
    // ...
    instantiate(t); // 直接传指针就行,因为是引用
    // ...
    if (t != NULL) {
        // do something
    }
    delete t; // 同样要记得释放内存!
}

这种写法代码更简洁,可读性也更高,是C++里更推荐的方式。

内容的提问来源于stack exchange,提问作者Daniel Franklin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:15:57