Итак, в рамках большого хобби-проекта обучения я реализовал в основном полную реализацию интеллектуального указателя. Он выполняет практически все, о чем я прошу, за исключением одной незначительной детали, которая может оказаться нарушителем, если я не смогу ее решить. Придуманный пример:
//Header1.h
#include <Header2.h>
class A
{
//Methods and such that involve class B in return type / arguments
};
//Header2.h
class A; //Forward declaration of A, needed because A includes Header2.h
class B
{
public:
SmartPointer<A> Ptr;
};
Предыдущий код, как вы могли догадаться, дает мне warning C4150: deletion of pointer to incomplete type 'type'; no destructor called
. Я знаю, почему это происходит; в Header2.h
код интеллектуального указателя включает в себя удаление в объявленном вперед экземпляре A
. Если бы я мог включить Header1.h
, нет проблем. Я действительно не хочу рефакторинга на этом этапе.
Я слышал, что умный указатель наддува как-то решил эту проблему. Внедрение поддержки не является целью этого проекта, так как это в значительной степени хобби / учебный проект. Так как же Boost справиться с этой проблемой? Как я мог заставить умный указатель вести себя, в этом случае, как необработанный указатель? У меня есть несколько идей, но я подумала, что вопрос можно перенести в SO, чтобы свести список идей в полезное подмножество.
Вперед, спасибо за помощь в решении этой проблемы.