Я новичок в мире C ++, но у меня есть некоторый опыт работы с C и я прочитал несколько уроков по C ++.Теперь создание объектов в C ++ кажется довольно простым и хорошо работает для меня, если у класса есть только атрибуты, которые являются значениями (не указателями).
Теперь, когда я пытаюсь создать объекты, которые выделяют память в конструкторедля некоторых их атрибутов я выясняю, как именно такие объекты передаются между функциями.Простой пример такого класса:
class A {
int *a;
public:
A(int value) {
this->a = new int;
*(this->a) = value;
}
~A() {
delete this->a;
}
int getValue() const { return this->a; }
}
Я хочу использовать класс и передать его по значению другим функциям и т. Д. По крайней мере, эти примеры должны работать без создания утечек памяти или ошибок двойного освобождения.
A f1() {
// some function that returns A
A value(5);
// ...
return value;
}
void f2(A a) {
// takes A as a parameter
// ...
}
A a = f1();
A b = a;
f2(a);
f2(f1());
Класс A
является неполным, потому что я должен переопределить operator=
и A(A& oldValue)
, чтобы решить некоторые из этих проблем.Насколько я понимаю, реализация этих методов по умолчанию просто копирует значение членов, из-за чего деструктор вызывается дважды для одних и тех же значений указателя.
Прав ли я, а что еще мне не хватает?Кроме того, знаете ли вы какой-нибудь хороший учебник, который объясняет эту проблему?