我可以在这个片段中找到问题所在:
我想重置一个函数内部的指针,我只是通过返回指针来实现它的工作原理,但是我无法使它产生副作用(通过指针传递)。
void function(Object * obj)[{
obj = new Object();
cout << obj << endl;
//return obj;
}
main(){
Object * obj = 0;
function(obj);
cout << obj << endl;
}
在这种情况下,结果是:
0x12345678
0
虽然应该是
0x12345678
0x12345678
我尝试使用指针指针或引用指针,但仍然无法通过该函数。虽然只是回归价值就像一个魅力。但我需要在几个参数上执行此操作,并且代码比此处显示的要复杂得多。
答案 0 :(得分:3)
如果你改变你的函数声明,它应该工作:
void function(Object * &obj)
在原始代码中,您通过值传递指针,这意味着函数创建了指针的副本,并且不会反映函数中指针的任何更改。当您通过引用传递时,您实际上正在处理原始数据,这可能是使用指针在幕后完成的。
答案 1 :(得分:0)
您可能希望看到this topic。
通过指针返回对象(C路):
void function(Object ** obj) {
*obj = new Object();
}
main(){
Object * obj = 0;
function(&obj);
...
通过引用返回对象(C ++方式):
void function(Object *& obj) {
obj = new Object();
}
main(){
Object * obj = 0;
function(obj);
...
答案 2 :(得分:0)
致电
void function(Object * obj){
你正在复制指针obj,换句话说,“function”的堆栈现在拥有一个名为obj的指针的本地副本。当函数返回时,此本地副本将被销毁。 哟可以实现你想要的目标:
void function(Object* obj&){
实际上会通过引用传递调用者的obj指针。现在对obj的任何更改都将反映在调用者的范围中。