加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 静态与成员变量

发布时间:2020-12-16 09:23:44 所属栏目:百科 来源:网络整理
导读:为了调试,我想在我的类中添加一些计数器变量.但是,如果不更改标题以进行大量重新编译,这样做会很好. 如果我正确理解了关键字,则以下两个片段将完全相同.当然假设只有一个实例. class FooA{public: FooA() : count(0) {} ~FooA() {} void update() { ++count;
为了调试,我想在我的类中添加一些计数器变量.但是,如果不更改标题以进行大量重新编译,这样做会很好.

如果我正确理解了关键字,则以下两个片段将完全相同.当然假设只有一个实例.

class FooA
{
public:
    FooA() : count(0) {}
    ~FooA() {}

    void update()
    {
        ++count;
    }

private:
    int count;
};

class FooB
{
public:
    FooB() {}
    ~FooB() {}

    void update()
    {
        static int count = 0;
        ++count;
    }
};

在FooA中,count可以在类中的任何位置访问,并且还会使标题膨胀,因为变量应该在不再需要时被删除.

在FooB中,变量仅在其存在的一个函数中可见.以后容易删除.我能想到的唯一缺点就是FooB的计数在所有类的实例之间共享,但在我的情况下这不是问题.

>这是否正确使用了关键字?我假设一旦在FooB中创建了count,它就会保持创建状态,并且不会在每次更新调用时重新初始化为零.
>我应该注意其他警告或抬头吗?

编辑:在得到通知,这将导致多线程环境中的问题后,我澄清我的代码库是单线程的.

解决方法

您对静态函数变量的假设是正确的.如果从多个线程访问它,则可能不正确.考虑使用InterlockedIncrement().

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读