我对静态变量有一个问题。
假设我在类中有一个静态指针并声明该类的2个对象。通过使用第一个对象,我删除了那个静态指针。该指针现在成为悬空指针,并假设第二个对象也引用该静态指针。
现在会发生什么以及如何避免这种情况?
答案 0 :(得分:0)
除非你有充分的理由否则不要让它静止。 如果你想制作一些静态的东西,那么试着避免使用指针。
*我确实说过将它放在堆栈上以简化讨论,但这对静态数据来说是错误的
当然,删除后总是可以设置指向NULL或nullptr的指针,并在使用之前检查指针是否有效。
您所描述的是当指针管理不当时软件中出现的常见问题。
编辑:
回应@πάνταῥεῖ评论,让我举个例子:
// not on the stack, read link in comments for more detail.
static MyClass my_class;
比管理更简单:
static MyClass* m_class;
@πάνταῥεῖ所说的语义是正确的,因为实际上它不在堆栈上,尽管它的行为方式与堆栈相似。 静态数据的寿命比堆栈上的数据长。
另一个编辑:
我给出了一个简单的答案,纯粹是为了避免需要通过不使用指针来管理静态指针。
我很高兴让@πάνταῥεῖ进入实际发生的事情的低级细节,如果原始人提出问题这会增加任何价值。
答案 1 :(得分:0)
如果您使用的是c ++ 11,请使用std :: unique_ptr 如果没有,请使用boost