谈谈C++内存越界问题及解决方法

谈谈C++内存越界问题及解决方法,第1张

谈谈C++内存越界问题及解决方法,第2张

与内存泄漏相比,C++最麻烦的问题是内存越界,这往往是由于挂指针造成的。

假设一个指针变量:
Object * ptr;

使用ptr时,不仅要判断ptr是否为0,还要怀疑它指向的对象是否有效,是否在别处被破坏过。我们希望当ptr指向的对象被销毁时,ptr自动设置为0。

很明显,C++没有这种机制,但借助boost::weak_ptr可以做到。
inline void null _ deleter(void const *)
{
}

X类
{
私人:

shared _ ptr this _
int I _;

公共:

explicit X(int i): this_(this,&null_deleter),i_(i)
{
}

X(X const & rhs): this_(this,&null_deleter),i_(rhs.i_)
{
}

X & operator =(X const & RHS)
{
I _ = RHS . I _;
}

weak _ ptr weak _ this()const { return this _;}
};

变量:
weak _ ptr ptr = x . weak _ this();// x是一个x对象。

然后当x被销毁时,ptr自动设置为无效。用法如下:

if(shard _ ptr safe ptr = ptr . lock())safe ptr-> do _ something();

这个方法用在单线程中,因为X对象可能是基于堆栈分配的。如果需要在多线程中访问X对象,那么最好的方法是使用shared_ptr来管理对象的生命周期。这样对于safePtr来说,可以保证它所指向的对象在safePtr的生存期内不会被其他线程删除。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 谈谈C++内存越界问题及解决方法

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情