2013-04-29 2 views
1

Может ли функция изменить цель указателя, переданного как параметр, чтобы эффект оставался вне функции?Могу ли я изменить цель указателя, переданного как параметр?

void load(type *parameter) 
{ 
    delete parameter; 
    parameter = new type("second"); 
} 

type *pointer = new type("first"); 
load(pointer); 

В этом примере минимального, будет pointer пункта второго объекта выделить? Если нет, как я могу получить такое поведение?

Обновление: Чтобы уточнить мое намерение, вот код, который я бы использовал, если бы параметр был нормальным типом вместо указателя. В этом случае я бы просто использовал ссылки.

void load(type &parameter) 
{ 
    parameter = type("second"); 
} 

type variable("first"); 
load(&variable); 

Это легко, но я стараюсь делать то же самое с указателями.

ответ

8

No.

parameter получит копию значения pointer в этом случае. Так что это новая переменная. Любые изменения, которые вы делаете для него, видны только в области функций. pointer остается неизменным.

Вы должны пройти the pointer по ссылке

void load(type *& parameter) 
       ^
{ 
+0

Я не знал об этой концепции. Он работает так, как ожидалось. Благодарю. – danijar

+0

@ danijar рад, что я мог бы помочь. – stardust

+0

Только параметр 'delete parameter;' не работает. I приводит к нарушению доступа. Могу ли я как-то освободить память перед назначением нового объекта? – danijar

0

В качестве альтернативы, вы можете использовать double указатели.

void load(type** parameter) 
{ 
    delete *parameter; 
    *parameter = new type("second"); 
} 

type *pointer = new type("first"); 
load(&pointer); 

Но так как вы используете CPP вы можете использовать references

Смежные вопросы