Побочное действие на указатель объекта

я могу получить, где проблема в этом фрагменте:

Я хочу сбросить указатель внутри функции, я добился, чтобы она работала, просто возвращая указатель, но я не мог сделать это с побочным эффектом (передавая указатель).

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

Я пытался использовать указатель указателя или указатель ссылок, но все еще не смог пройти через функцию. Хотя просто возвращение значения работало как шарм. Но мне нужно сделать это по нескольким параметрам, и код гораздо сложнее, чем здесь показывается.

2

Решение

Если вы измените объявление своей функции так, оно должно работать:

void function(Object  * &obj)

В исходном коде вы передавали указатель по значению, что означает, что функция сделала копию указателя, и любые изменения указателя в функции не будут отражены. Когда вы передаете по ссылке, вы на самом деле работаете с исходными данными, это может быть сделано за кулисами с помощью указателей.

3

Другие решения

Вы можете захотеть увидеть Эта тема.

Возврат объекта по указателю на указатель (путь 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);
...
0

когда ты звонишь

void function(Object * obj){

вы копируете указатель obj, другими словами, стек «функции» теперь содержит локальную копию указателя с именем obj. Когда функция возвращает эту локальную копию, она уничтожается.
Йо может достичь того, что вы хотите, с помощью:

void function(Object* obj&){

Который фактически передаст указатель obj вызывающей стороны, по ссылке. Теперь любое изменение в obj также будет отражено в области действия вызывающей стороны.

0
По вопросам рекламы [email protected]