所有智能指针(例如,boost :: scoped_ptr,boost :: optional,std :: auto_ptr等)都会进行断言,以检查内部指针是否已初始化。可以在很多次上取消引用它,但如果次数真的很大(数十亿,十亿次)怎么办? 例如,有一个类:
class A
{
public:
A( std::auto_ptr< B > _someObject )
: m_object( _someObject ) {}
B const& getMember() const
{ return *m_object; }
private:
boost::scoped_ptr< B > m_object;
};
someObject始终不为null,并且getMember()的某个地方被调用了很多次。在每次调用时,都会在m_object内部进行断言 是否更喜欢使用原始指针?当然,这将导致析构函数创建删除原始指针 这种说法会在这种情况下产生一些明显的影响吗?或者那仍然可以忽略不计?
答案 0 :(得分:4)
使用-DBOOST_DISABLE_ASSERTS
编译您的程序并进行比较。但我会冒昧地说, 断言的性能损失可以忽略不计。正如@Travis所说,可能断言甚至没有在发布模式下进入你的程序。
答案 1 :(得分:4)
std::unique_ptr
,而不是Boost或已弃用的std::auto_ptr
。get()
。示例:
B const& getMember() const
{ return *m_object.get(); }
这将为您返回原始指针。