моему базовому классу необходимо выставить метод, который для некоторых производных классов вернет умный указатель на динамически выделенный массив, а для некоторых других производных классов вернет указатель/ссылку на статически распределенные один.Смарт-указатель на C++ для статически и динамически распределенного ресурса
пример:
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» w/custom deleter. Однако у него есть некоторые накладные расходы. Если накладные расходы оказались неприемлемыми, вы можете создать свой собственный на основе 'boost :: intrusive_ptr', который не имеет этой служебной задачи (динамическое распределение). –
Из памяти std :: shared_ptr предоставляет конструктор, где он может «владеть» одним объектом, но на самом деле указывает на другой, для этой цели. На самом деле я не могу найти никаких доказательств этого в MSDN, и я также не могу написать код, который использует это. – Puppy