Вы не должны здесь использовать необработанные указатели. Там нет причин для этого. Это просто приглашение сделать кучу ошибок.
Во-вторых, синтаксис, который вы используете для инициализаторов, очень нарушен, синтаксис работает совсем не так. Я приведу пример того, как инициализаторы должны выглядеть здесь, чтобы вы могли видеть. Вы также неправильно понимаете, что делает new
. Вам не нужно никаких заданий, которые вы делаете. Ни один из них.
Кроме того, вы ошиблись public
как publuc
. И способ, которым вы объявляете ваш конструктор, не подходит для объявления его как члена класса.
Вы знаете, почти все проблемы, которые у вас есть, компилятор должен был дать вам хотя бы смутные сообщения об ошибках, и вам не нужно, чтобы мы их исправляли.
Вот пример класса, который использует некоторые члены-указатели. Обратите внимание, что если вы используете члены-указатели, особенно как начинающий C ++, вы почти наверняка делаете что-то не так. Голые указатели должны быть среди последних вещей, о которых вы узнаете в C ++, а не первыми:
class IHaveSomePointers {
public:
IHaveSomePointers(bool const &mybool, int const &myint)
: mybool_{new bool(mybool)}, myint_{new int(myint)}
{ }
~IHaveSomePointers() {
delete mybool_;
delete myint_;
}
IHaveSomePointers(IHaveSomePointers const &) = delete;
void operator =(IHaveSomePointers const &) = delete;
private:
bool *mybool_;
int *myint_;
};
У этого класса есть одна проблема. Если выделение myint_
вызывает исключение, произойдет утечка памяти. Именно из-за этого вы не используете необработанные указатели в C ++, особенно для переменных-членов, и особенно, если объект, на который они будут указывать, выделен с помощью new
.
Я удалил конструктор копирования и оператор присваивания, потому что им нужны специальные реализации для классов, которые содержат необработанные указатели. Я заметил, что вы, кажется, пытались определить свой собственный конструктор копирования, но это трудно сказать, потому что ваше объявление конструктора очень искажено.
Вот как этот класс должен быть написан:
class IDontHavePointersBecauseThatsBad {
public:
IDontHavePointersBecauseThatsBad(bool const &mybool, int const &myint)
: mybool_{mybool}, myint_{myint}
{ }
private:
bool mybool_;
int myint_;
};
Если вам абсолютно необходимо динамически распределять объекты, сделайте следующее:
#include <memory>
class ForSomeBizarreReasonIDyanmicallyAllocate {
public:
ForSomeBizarreReasonIDynamicallyAllocate(bool const &mybool, int const &myint)
: mybool_{::std::make_unique<bool>(mybool)},
myint_{::std::make_unique<int>(myint)}
{ }
private:
::std::unique_ptr<bool> mybool_;
::std::unique_ptr<int> myint_;
};
Этому классу не нужен деструктор, чтобы убедиться, что он удаляет память, которую он выделяет. У него нет потенциальной утечки памяти. Все вокруг лучшего класса.