6 个解决方案
#1
类型安全是指我们使用一个类的指针在调用类的函数或传递类的对象时,该指针“确实”是指向我们所规定的类的对象。
例如:
class A;
A *p=new A;
p->func(); //类型不安全,我们不能保证指针p
//“确实”指向类A的一个对象,因为前面的new可能不成功。
例如:
class A;
A *p=new A;
p->func(); //类型不安全,我们不能保证指针p
//“确实”指向类A的一个对象,因为前面的new可能不成功。
#2
楼上,请问在实际编程过程中,为了实现类型安全,或者说为了考虑类型安全的问题,我们应该注意些什么呢?
#3
如前所述,类型安全就是要求类的指针“确实”指向类的一个对象。要做到这一点,无非就是在使用指针之前,多做一些验证工作。为实现这一点,需要:
(1)对每一个需要类型安全的类,提供“运行时类信息”(RTTI)。
所谓RTTI,就是一块静态数据,它包含类的名字,版本号等信息。每一个支持类型安全的类都与唯一一个RTTI一一对应。
(2)提供一个虚函数访问该RTTI。
这样当我们有一个该类的指针的时候,如果该指针“确实”是指向我们所规定的类的对象,就可能通过该指针访问RTTI以验证类的“名字”、“版本号”等信息了。反之,如果该指针不指向一个实际的对象,我们就不可能得到正确的信息。
(3)在任何实际使用指针之前,都必须进行上述的验证。
(4)事实上,VC的CObject类(及其派生类)就是典型的类型安全的类。楼主可以参见它的设计。(诸如ASSERT宏等)。
(1)对每一个需要类型安全的类,提供“运行时类信息”(RTTI)。
所谓RTTI,就是一块静态数据,它包含类的名字,版本号等信息。每一个支持类型安全的类都与唯一一个RTTI一一对应。
(2)提供一个虚函数访问该RTTI。
这样当我们有一个该类的指针的时候,如果该指针“确实”是指向我们所规定的类的对象,就可能通过该指针访问RTTI以验证类的“名字”、“版本号”等信息了。反之,如果该指针不指向一个实际的对象,我们就不可能得到正确的信息。
(3)在任何实际使用指针之前,都必须进行上述的验证。
(4)事实上,VC的CObject类(及其派生类)就是典型的类型安全的类。楼主可以参见它的设计。(诸如ASSERT宏等)。
#4
不安全,会出Assert错误
#5
我认为类型安全包括很多方面 包括指针的指向 类型的转换 精度的丢失 异常的保护等
#6
感谢各位,特别感谢zhukeke
#1
类型安全是指我们使用一个类的指针在调用类的函数或传递类的对象时,该指针“确实”是指向我们所规定的类的对象。
例如:
class A;
A *p=new A;
p->func(); //类型不安全,我们不能保证指针p
//“确实”指向类A的一个对象,因为前面的new可能不成功。
例如:
class A;
A *p=new A;
p->func(); //类型不安全,我们不能保证指针p
//“确实”指向类A的一个对象,因为前面的new可能不成功。
#2
楼上,请问在实际编程过程中,为了实现类型安全,或者说为了考虑类型安全的问题,我们应该注意些什么呢?
#3
如前所述,类型安全就是要求类的指针“确实”指向类的一个对象。要做到这一点,无非就是在使用指针之前,多做一些验证工作。为实现这一点,需要:
(1)对每一个需要类型安全的类,提供“运行时类信息”(RTTI)。
所谓RTTI,就是一块静态数据,它包含类的名字,版本号等信息。每一个支持类型安全的类都与唯一一个RTTI一一对应。
(2)提供一个虚函数访问该RTTI。
这样当我们有一个该类的指针的时候,如果该指针“确实”是指向我们所规定的类的对象,就可能通过该指针访问RTTI以验证类的“名字”、“版本号”等信息了。反之,如果该指针不指向一个实际的对象,我们就不可能得到正确的信息。
(3)在任何实际使用指针之前,都必须进行上述的验证。
(4)事实上,VC的CObject类(及其派生类)就是典型的类型安全的类。楼主可以参见它的设计。(诸如ASSERT宏等)。
(1)对每一个需要类型安全的类,提供“运行时类信息”(RTTI)。
所谓RTTI,就是一块静态数据,它包含类的名字,版本号等信息。每一个支持类型安全的类都与唯一一个RTTI一一对应。
(2)提供一个虚函数访问该RTTI。
这样当我们有一个该类的指针的时候,如果该指针“确实”是指向我们所规定的类的对象,就可能通过该指针访问RTTI以验证类的“名字”、“版本号”等信息了。反之,如果该指针不指向一个实际的对象,我们就不可能得到正确的信息。
(3)在任何实际使用指针之前,都必须进行上述的验证。
(4)事实上,VC的CObject类(及其派生类)就是典型的类型安全的类。楼主可以参见它的设计。(诸如ASSERT宏等)。
#4
不安全,会出Assert错误
#5
我认为类型安全包括很多方面 包括指针的指向 类型的转换 精度的丢失 异常的保护等
#6
感谢各位,特别感谢zhukeke