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