无法按值复制的指针容器类

Nav*_*K N 2 c++ templates

我需要一个智能指针用于我的项目,可以作为参数发送到几个方法.我从boost 检查了auto_ptrshared_ptr.但IMO,这不符合我的要求.以下是我的发现

auto_ptr:当传递给另一个方法时,将转移所有权,并在该方法的范围结束时删除基础指针.我们可以通过引用传递auto_ptr来解决这个问题,但是没有编译时机制来确保它总是通过引用传递.如果错误地,用户忘记传递引用,则会产生问题.

boost :: shared_ptr:这看起来很有前途,可以满足我的需要.但我觉得这对我的项目来说太过分了,因为它很小.

所以我决定编写一个简单的模板化指针容器类,它不能被值复制并注意删除底层指针.这里是

template <typename T>
class simple_ptr{
public:
    simple_ptr(T* t){
       pointer = t;
    }
    ~simple_ptr(){
       delete pointer;
    }
    T* operator->(){
       return pointer;
    }
private: 
    T* pointer;
    simple_ptr(const simple_ptr<T>& t);
};
Run Code Online (Sandbox Code Playgroud)

这个实现是否正确?我已经将复制构造函数设置为私有,因此编译器会在有人尝试按值传递时发出警报.

如果指针被删除,则对析构函数的删除操作将抛出断言错误.我该如何解决这个问题?

我对C++很陌生,你的建议非常感谢.

谢谢

j_r*_*ker 7

请使用Martin York建议的boost :: scoped_ptr <>,因为它:

  • 完全符合你的要求(这是一个不可复制的指针)
  • 没有高于标准C指针的开销
  • 由超级智能C++向导精心制作,以确保其行为符合预期.

虽然我看不出你的实现有任何问题(在应用了ChrisW建议的更改之后),C++有很多黑暗的角落,如果有一些模糊的角落情况我不会感到惊讶你,我和其他人都未能点.