2012-04-10 4 views
2

Я вижу определение функции, которая выглядит как этотC++ ссылки, адреса, указатели

ClassName::Read(myObjectClass &temp) 

Я пытаюсь назвать это так:

myObjectClass *myObj; 
ClassName::Read(&myObj); 

, но это неверно. Каков правильный способ назвать это? Он должен быть типа myObjectClass&

+0

Просто будьте осторожны, если объект 'myObj' не создается в вызывающей функции (например, new myObjectClass), Read будет записывать на некоторый неопределенный адрес. – guga

ответ

5

Как Джеймс правильно указывает, правильный синтаксис *myObj. Дело в том, что &myObj дает вам адрес myObj, который имеет тип myObjectClass**. Вместо этого вы должны указать разыгрыватьmyObj, чтобы получить экземпляр myObjectClass, на который он указывает, следовательно, вы используете *.

Кстати, поскольку он находится на данный момент, использование *myObj приведет к неопределенному поведению, так как сам myObj не был инициализирован. Если вам не нужно, чтобы динамически выделять myObjectClass, вы могли бы быть лучше всего делать это:

myObjectClass myObj; 
ClassName::Read(myObj); 

Если динамическое распределение является обязательным, то вы можете сделать, например,

myObjectClass *myObj = new myObjectClass; 
ClassName::Read(*myObj); 
//... 
delete myObj; 
9

Как это:

ClassName::Read(*myObj); 
0

Таким образом

myObjectClass myObj; 
ClassName::Read(myObj); 

Вы не должны использовать указатели и динамическое распределение во всем мире. C++ - это не Java.

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