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

时间:2010-10-25 12:00:35

标签: 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; 
  }
}

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

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

1 个答案:

答案 0 :(得分:5)

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

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