我的基类需要公开一个方法,对于某些派生类,它会返回一个指向动态分配数组的智能指针,对于某些其他派生类,它会返回一个指向静态分配的指针/引用。
示例:
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
的类,它会知道指针分配并且不会尝试销毁静态分配的指针,或者可能已经存在这样的智能指针吗?
答案 0 :(得分:5)
您可以为Boost smart pointers提供自定义删除。这也可以是一个不做任何事情的空函数。对于返回动态分配的数组的类,您可以使用标准shared_array
,并且对于返回指向静态分配的数组的指针的类,您可以返回带有空自定义删除符的shared_array
。
请注意,您的问题更深入。返回将由调用者拥有的指针退出与返回该对象拥有的指针不同。您可能需要考虑不要将这两者混合在同一个函数中。