У меня есть такой класс:
class Inner;
class Cont
{
public:
Cont();
virtual ~Cont();
private:
Inner* m_inner;
};
в .cpp конструктор создает экземпляр Inner
с new
и деструктором delete
s. Это работает очень хорошо.
Теперь я хочу изменить этот код для использования auto_ptr
, поэтому я пишу:
class Inner;
class Cont
{
public:
Cont();
virtual ~Cont();
private:
std::auto_ptr<Inner> m_inner;
};
Теперь конструктор инициализировал auto_ptr
, а деструктор ничего не делает.
Но это не работает. проблема, кажется, возникает, когда я создаю экземпляр этого класса. Я получаю это предупреждение:
предупреждение C4150: удаление указателя на
неполный тип «Внутренний»; нет
деструктор называется
Ну, это, очевидно, очень плохо, и я понимаю, почему это происходит. Компилятор не знает о d'tor Inner
при создании шаблона auto_ptr<Inner>
Итак, мой вопрос: есть ли способ использовать auto_ptr
с предварительным объявлением, как я делал в версии, в которой используются только простые указатели?
Наличие #include
каждого класса, на который я объявляю указатель, является большой проблемой, а порой просто невозможным. Как обычно решается эта проблема?