首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >定义no-delete指针最简洁的方式是什么?

定义no-delete指针最简洁的方式是什么?
EN

Stack Overflow用户
提问于 2019-04-19 02:42:37
回答 1查看 449关注 0票数 3

我最近遇到了一个旧的C函数,返回一个指向静态数组的指针。我在该函数周围编写了一个包装器,并返回了一个std::unique_ptr,它使用了一个不可删除的标记来强调返回的指针类型--给用户一个“不要删除我”的警告。下面是一个示例代码

代码语言:javascript
复制
 extern "C" int *f(int i);

 struct noop
 {
      template <typename T>
      void operator() (T t) const noexcept
      {
      }
 };
 class MyClass
 {
     public:          
     std::unique_ptr<int, noop> F(int value) const 
      { 
            return std::unique_ptr<int, noop>(f(value));
      }
 };

有没有一种不用定义无删除结构就能做到这一点的更干净的方法?

EN

回答 1

Stack Overflow用户

发布于 2019-04-23 02:26:20

C++编码指南建议使用别名或“虚拟”包装器来表示所有权或非空:

关于它们的实现,请看一下:

https://github.com/Microsoft/GSL/blob/master/include/gsl/pointers

您将看到owner<>non_null<>的示例。

你可以用相似的定义。显然,不能删除不具有所有权的指针;如果只是想要一个提醒,那么

代码语言:javascript
复制
template <class T, class = std::enable_if_t<std::is_pointer<T>::value>>
using non_owner = T;

如果您想要强制执行,请从链接中复制并调整non_null<>的代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55752058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档