我需要一个智能指针用于我的项目,可以作为参数发送到几个方法.我从boost 检查了auto_ptr和shared_ptr.但IMO,这不符合我的要求.以下是我的发现
auto_ptr:当传递给另一个方法时,将转移所有权,并在该方法的范围结束时删除基础指针.我们可以通过引用传递auto_ptr来解决这个问题,但是没有编译时机制来确保它总是通过引用传递.如果错误地,用户忘记传递引用,则会产生问题.
boost :: shared_ptr:这看起来很有前途,可以满足我的需要.但我觉得这对我的项目来说太过分了,因为它很小.
所以我决定编写一个简单的模板化指针容器类,它不能被值复制并注意删除底层指针.这里是
templateclass 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); };
这个实现是否正确?我已经将复制构造函数设置为私有,因此编译器会在有人尝试按值传递时发出警报.
如果指针被删除,则对析构函数的删除操作将抛出断言错误.我该如何解决这个问题?
我对C++很陌生,你的建议非常感谢.
谢谢
请使用Martin York建议的boost :: scoped_ptr <>,因为它:
完全符合你的要求(这是一个不可复制的指针)
没有高于标准C指针的开销
由超级智能C++向导精心制作,以确保其行为符合预期.
虽然我看不出你的实现有任何问题(在应用了ChrisW建议的更改之后),C++有很多黑暗的角落,如果有一些模糊的角落情况我不会感到惊讶你,我和其他人都未能点.