2013-03-13 2 views
0

Предположим, у меня есть класс с именем MyClass,Функция, которая возвращает указатель на класс

Я пишу функцию, которая должна возвращать объект типа MyClass. Этот объект уже существует до вызова функции. Так обычно я хотел бы сделать:

MyClass function() { 
return MyClassInstance; 
} 

Но потом я вспомнил про указатели и ссылки, и я думаю, что сделать это будет создавать новую копию MyClassInstance и вернуть его, что это пустая трата памяти. Поэтому я подумал, почему бы не сделать что-то вроде этого:

MyClass * function() { 
return &MyClassInstance; 
} 

Таким образом, результат может быть доступны, как,

Myclass * object; 
object = function(); 
object->"class member"... 

Является ли это правильно?

ответ

0

Вы точно можете сделать это. Он будет работать нормально. У него нет проблем с точки зрения синтаксиса. Но вам нужно очень внимательно следить за тем, чтобы на объект указывалось более одного указателя. Это может вызвать некоторые скрытые проблемы.

+0

Я не уверен, что понимаю, что вы имеете в виду. Можете ли вы предоставить некоторые детали, пожалуйста? – jazzybazz

+0

Код, который вы написали, не имеет проблем. Но вам нужно знать, что вы хотите сделать. Если вы просто хотите ссылаться на один и тот же объект где-то другим указателем, не изменяя значения исходного объекта или просто изменяя его значения, как вы полагаете. Тогда это идеальный способ сделать это. Потому что он может сэкономить память с помощью указателя. Если вам нужен новый объект, то этот способ может быть вредным. Потому что будут два указателя, указывающие на единственный объект. Любые изменения с помощью любого указателя будут влиять на состояние объекта. Вы должны заботиться об этой ситуации. Я ясно выразился? – YXHJ513

+0

Да, большое спасибо. – jazzybazz

1

Я не уверен, что вы - ваша конечная цель здесь, синтаксис выглядит нормально. Но, возможно, вам стоит прочитать об одноэлементных шаблонах в C++.

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