C++智能指针指向静态和动态分配的资源

bar*_*tek 2 c++ smart-pointers

我的基类需要公开一个方法,对于某些派生类,它会返回一个指向动态分配数组的智能指针,对于某些其他派生类,它将返回一个指向静态分配的指针/引用.

例:

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; 
  }
}
Run Code Online (Sandbox Code Playgroud)

动态分配的数组是在类方法中创建的,我更喜欢使用std::unique_ptr.但是我应该为类中的静态分配数组做些什么A呢?

我应该创建自己的派生类,std::unique_ptr它会知道指针分配,并且不会试图破坏静态分配的指针,或者可能已经存在这样的智能指针?

Bjö*_*lex 5

您可以为Boost智能指针提供自定义删除器.这也可以是一个不做任何事情的空函数.对于返回动态分配的数组的类,您可以使用标准shared_array,并且对于返回指向静态分配的数组的指针的类,您可以返回shared_array带有空自定义删除的数组.

请注意,您的问题更深层次.返回将由调用者拥有的指针退出与返回该对象拥有的指针不同.您可能想要考虑不要将这两者混合在同一个函数中.