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

发布于 2024-09-29 11:30:05 字数 563 浏览 2 评论 0原文

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

示例:

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 派生的类,该类将了解指针分配并且不会尝试销毁静态分配的指针,或者可能已经存在这样的智能指针?

my base class need to expose a method that for some derived classes would return a smart pointer to dynamically allocated array, and for some other derived classes would return a pointer/reference to statically allocated one.

example:

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; 
  }
}

The dynamically allocated array is created inside class method and I would prefer to use a std::unique_ptr. But what should I do for the statically allocated array in class A?

Should I create own class derived from std::unique_ptr that would be aware of pointee allocation and would not try to destroy statically allocated pointee, or maybe there already exist such smart pointers?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

帅气尐潴 2024-10-06 11:30:05

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

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

You can provide custom deleters for Boost smart pointers. This can also be an empty function that does not do anything. For the class returning a dynamically allocated array, you can use a standard shared_array, and for the class returning a pointer to a statically allocated array you can return a shared_array with an empty custom deleter.

Note that your problem lies deeper here. Returning a pointer that will be owned by the caller is quit different from returning a pointer owned by the object. You may want to consider not mixing these two in the same function.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文