2014-10-12 4 views
1

Скажем, у меня есть строка кода, как это:Как назначить переменную новый объект

MyClass obj(1, 2, "hello"); 

И в какой-то момент в будущем, я хочу, чтобы присвоить obj новое значение, т.е. obj(3, 4, "bye"). Как это сделать?

Я имею в виду Java Я хотел бы сделать это:

MyClass obj = new MyClass(1, 2, "hello"); 
obj = new MyClass(3, 4, "bye"); 

В C++ Я попытался это:

MyClass obj(1, 2, "hello"); 
obj(3, 4, "bye"); 

Но это не сработало, так что я и пытался это:

MyClass obj(1, 2, "hello"); 
obj = MyClass(3, 4, "bye"); 

И это ac но я не уверен, что это лучший способ добиться этого.

Пожалуйста, предложите мне чистый способ присвоить переменную новый объект и сообщить мне, есть ли какие-либо дополнительные усилия, необходимые для управления памятью после такого назначения.

Пожалуйста, имейте в виду, что я начал изучать C++ два дня назад, но я знаю ООП понятия, как хорошо, как я знаю, сколько пальцев руки у меня есть.

+1

Вторая вещь, которую вы пробовали, прекрасна и идиоматична. Вы также можете предоставить методы для изменения значений членов. – juanchopanza

+0

@juanchopanza Я не видел никаких примеров этого в учебниках http://www.cplusplus.com, поэтому я думал, что это не очень хороший способ сделать это. Но что, если я использую объект 'stringstream', т. Е.' Stringstream ss (line); ss = stringstream (anotherline); '. Это тоже хорошо? – Salivan

+0

cplusplus.com - это не совсем здорово. Что касается 'stringstream', это сработает, но только с C++ 11. До этого вы не могли копировать или назначать этот тип. – juanchopanza

ответ

1

код в C++, который похож на код Java

MyClass obj = new MyClass(1, 2, "hello"); 
obj = new MyClass(3, 4, "bye"); 

будет выглядеть

MyClass *obj = new MyClass(1, 2, "hello"); 
delete obj; 
obj = new MyClass(3, 4, "bye"); 

Путь, который вы используете для назначения объекта в C++ как

MyClass obj(1, 2, "hello"); 
obj = MyClass(3, 4, "bye"); 

действителен при условии, что существует действительный оператор присваивания копирования или перемещения, определенный в классе.

+0

Это выглядит намного лучше. Мне нравится ваш подход. Но что, если я не буду использовать 'delete obj;' перед тем, как присвоить ему новый? Пропал ли старый объект без возможности его удалить позже? – Salivan

+0

@Salivan C++ не имеет сборщика мусора. Таким образом, произойдет утечка памяти. –

+0

Спасибо за подход! – Salivan

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