моему базовому классу необходимо предоставить метод, который для некоторых производных классов будет возвращать интеллектуальный указатель на динамически выделенный массив, а для некоторых других производных классов будет возвращать указатель/ссылку на статически выделенный.
пример:
class Base
{
public:
virtual ??? foo()=0;
}
class A : public Base
{
private:
float arr[10];
public:
??? foo(){ return ???arr; }
}
class B : public Base
{
public:
??? foo(){
allocate array;
return ???array;
}
}
Динамически выделяемый массив создается внутри метода класса, и я бы предпочел использовать std::unique_ptr
. Но что мне делать со статически выделенным массивом в классе A
?
Должен ли я создать собственный класс, производный от std::unique_ptr
, который бы знал о размещении указателя и не пытался уничтожить статически размещенный указатель, или, может быть, такие умные указатели уже существуют?
boost::shared_ptr
с настраиваемым средством удаления был бы одним из вариантов. Однако у него есть некоторые накладные расходы. Если накладные расходы окажутся неприемлемыми, вы можете создать свой собственный на основеboost::intrusive_ptr
, у которого нет этой проблемы с накладными расходами (динамическое выделение). - person Cheers and hth. - Alf   schedule 25.10.2010