У меня есть такой класс:
class Inner;
class Cont
{
public:
Cont();
virtual ~Cont();
private:
Inner* m_inner;
};
в .cpp конструктор создает экземпляр Inner
с new
, а деструктор delete
его. Это работает очень хорошо.
Теперь я хочу изменить этот код, чтобы использовать 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
для каждого класса, на который я объявляю указатель, является огромной проблемой, а иногда и просто невозможной . Как обычно решается эта проблема?
auto_ptr
внутри класса. - person shoosh   schedule 23.12.2009