【发布时间】:2010-10-25 12:00:35
【问题描述】:
我的基类需要公开一个方法,该方法对于某些派生类将返回一个指向动态分配数组的智能指针,而对于某些其他派生类将返回一个指向静态分配数组的指针/引用。
示例:
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_ptrw/custom deleter 将是一种选择。但是,它有一些开销。如果开销被证明是不可接受的,您可以根据boost::intrusive_ptr创建自己的,它没有开销问题(动态分配)。 -
从内存中,std::shared_ptr 提供了一个构造函数,它可以“拥有”一个对象,但实际上指向另一个对象,正是为了这个目的。不过,我实际上在 MSDN 上找不到任何证据,而且我实际上也无法编写任何使用它的代码。
标签: c++ smart-pointers