Таким образом, в рамках большого проекта обучения хобби я реализовал реализацию в основном полной реализации интеллектуальных указателей. Он делает практически все, о чем я прошу об этом, за исключением одной мелкой детали, которая может оказаться нарушителем сделки, если я не смогу ее решить. Надуманный пример:Умные указатели, форвардная декларация и C4150
//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 мог отбросить список идей в полезное подмножество.
Вперед, объявляя спасибо, что помог мне решить эту проблему.
связанный: [удалить объекты неполного типа] (http://stackoverflow.com/questions/4325154/) – fredoverflow