![]() |
1
1
你愿意走多远?如果有人想破坏你的代码,他们会的,你也无能为力。 您应用的保护越有效,它们就越难实现。 一个简单的方法是检查NULL。这并不能防止愚蠢的指针,但可以防止有意识地使其无效。大多数人对此感到满意。 然后您可以给指针一个包装类。实例化这个类需要一个指向的有效对象(或者一些毫无希望的跳过环来给它一个无效的对象,这相当于故意放屁),因此不会出现未初始化指针的情况,但对象可以在使用其指针之前停止存在。 然后,您可以为这些对象及其指针维护一个工厂/管理器类。每次创建或销毁指针目标对象时,都会创建或使其指针无效。除非您的代码是多线程的,否则这将是防失败的,并且在使用验证值之前,当您的函数已经通过检查时,可能会发生破坏。
然后可以添加线程安全性,将函数和管理器包装在互斥锁中。这增加了与死锁和同步相关的各种头痛问题。但是用户必须非常努力地创建一个派生自您的类(可能使用
每走一步,你的头顶就会爬到一个水平,而这个水平的效果真的不值得你付出努力了。所以,只需检查该指针是否为NULL,不要担心其他人会把你弄出来。 |
![]() |
2
1
对于什么是“最佳”方法,人们的看法会有所不同,因为根本不可能阻止某人传递一个坏的(例如未初始化的、悬空的)指针。 一个常见的解决方案是完全避免使用原始指针,并以根本不接受指针的方式编写函数。 一种方法是接受推荐信。编写代码,使其根本不使用原始指针,这样就很难用错误的参数调用函数。限制是,调用方仍然可以创建错误引用(例如,通过取消对错误指针的引用),但将错误引用传递给函数要比传递错误指针花费更多的精力(如果无意中这样做的话,错误序列会更长)。 另一种方法是通过值(或引用,在某些情况下)接受某个类对象来保存指针。然后实施 全部的 它的成员函数,以防止出现持有错误指针的情况。不给该类提供接受指针的成员函数。确保构造函数和其他成员函数保持一致性(在形式上,构造函数建立一组严格的不变量,其他成员函数维护这组不变量)。这包括在尝试使用错误数据构造对象时引发异常等技术(如果在构造对象的过程中引发异常,则该对象永远不存在,并且无法以任何方式传递给函数)。因此,如果函数被成功调用,则可以假定它接收的数据是有效的。 问题是,上述情况使得意外地将错误数据传递给函数变得更加困难。任何技术都无法完全阻止那些决心足够坚定(无论是天才还是愚蠢)的人找到绕过所有安全措施的方法,并将不良数据传递给您的功能。 |
![]() |
3
0
基本上有两种解决方案。
|
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 4 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 4 月前 |
![]() |
tTt · 使用堆栈中的值重新分配指针 5 月前 |
![]() |
manuel · 现代C中空指针的替代方案++ 6 月前 |
![]() |
CPlus · 有没有一种方法可以确定指针的表示在C中是否是“线性的”? 10 月前 |