所有智能指针(例如 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 始终不为空,并且在某处 getMember() 被调用了很多次。在每次调用时,都会在 m_object 中进行断言。
是否最好使用原始指针?当然,这会导致析构函数创建删除原始指针。
在这种情况下,断言会产生一些明显的影响吗?还是仍然可以忽略不计?