我最近遇到了一个返回静态数组指针的旧 C 函数。我围绕该函数编写了一个包装器并返回了一个 std::unique_ptr
,它使用不删除来强调返回的指针类型——向用户发出“不要删除我”的警告。这是一个示例代码
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));
}
};
是否有一种更简洁的方法可以在不定义不删除结构的情况下执行此操作?
最佳答案
[..] an old C-function returning a pointer to an static array. I wrote a wrapper around that function and returned a
std::unique_ptr
不要。返回 std::unique_ptr
对调用者说:
- 你拥有这段内存,自己清理
- 你拥有这 block 内存,没有人会干涉(线程安全)
- 你拥有这段内存。因此,每次调用(包装函数)时都会得到一个新对象。
对于指向静态数组的指针,这些都不是真的!
坚持使用原始指针或使用一些包装类来允许类似引用的访问。 std::reference_wrapper
例如,在复制时还提供原始指针等语义。
关于c++ - 定义不删除指针的最干净的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55752058/