当前位置:  开发笔记 > 编程语言 > 正文

静态变量,单独编译

如何解决《静态变量,单独编译》经验,为你挑选了1个好方法。

我写了一个程序,它都在一个文件中,并且方法在标题中向前声明.该程序最初在一个文件中完美运行.但是当我分离程序时,我不断发现在头文件中声明的类之一的析构函数.

我的标题中有一个静态变量来计算特定类的对象数.每当我构造对象时,我都会增加此变量.然后在我的析构函数中,我从该变量中减去1,检查它是否为0(意味着它是最后一个对象)并执行某些操作.价值似乎有时会消失,我不知道为什么.我的应用程序中有随机调用,但我不明白为什么会影响我上面描述的内容,谢谢.任何帮助或见解表示赞赏!

[更新]:有一个基类,其中包含析构函数..它在头文件中实现,然后我有两个派生类,它们在构造函数中递增静态var ..所以我该怎么办?

我想要做的是以下内容:在我的标题中我有这个:

class A {
public:
    virtual ~A() {
        count --;
        if (count == 0) { /* this is the last one, do something */ }
    }

class B : public A {
public:
    B();
}

然后在Class BI中有

B::B() { 
    count++;
}

我在哪里可以定义计数,所以我不会产生误导性的计数?谢谢.



1> Martin York..:

您必须在A(所有这些)中定义构造函数以增加计数.

注意除非你定义它们,否则编译器会自动生成以下四种方法:

默认构造函数(如果没有定义其他构造函数)

默认析构函数

复制构造函数

分配操作员

以下代码会覆盖编译器默认值,以便您获得准确的计数.

 class A
 {
    static int count;

    public:
        A()   // Default constructor.
        {
            ++count;
        }
        A(A const& copy)  // Copy constructor/
        {                 // Note If you do not define it the compiler
            ++count;      // will automatically do it for you
        }
        virtual ~A()
        {
            --count;
            if (count == 0)
            {  // PLOP
            }
        }
        // A& operator=(A const& copy)
        // do not need to override this as object has
        // already been created and accounted for.
};

////在源文件中:

int A::count = 0;

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有