带有静态指针删除的C ++类

时间:2014-05-24 09:22:06

标签: c++ static

我对静态变量有一个问题。      假设我在类中有一个静态指针并声明该类的2个对象。通过使用第一个对象,我删除了那个静态指针。该指针现在成为悬空指针,并假设第二个对象也引用该静态指针。
            现在会发生什么以及如何避免这种情况?

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