在 C++ 中正确使用 assert()

Proper use of assert() in c++

我的教授给了我们一个练习,我们必须决定什么时候使用 assert(check_inv()) 是合适的,该 assert(check_inv()) 使对象保持在符合 class 不变式的状态.

我不确定什么时候需要检查 class 不变量,我知道在从他的构造函数返回对象之前检查 class 不变量是一个很好的做法,但是如果其他功能我不完全确定。

这是考试内容:

class C
{ 

    public: 

        bool check_inv() const 
        { 
            // Implementation of class invariant code
        }

        C(int a, int b)
        { 
            // Implementation of class constructor.
        }
        void foo(C& y)
        {
            // Implementation of method foo. 
        }
        void bar(const C& y)
        { 
             // Implementation of method bar.
        }
        void ying(const C& y)
        { 
            // Implementation of method ying. 
        }
        void yang(const C& y) const
         { 
             // Implementation of method yang.
         }
        ~C()
         { 
             // Implementation of class destructor.
         }
        static void zen(int i, double d) 
        { 
            //Implementation of method zen.
        }
// ... Some other code ...
}; // class C

我应该在哪里检查 class 不变量?

编辑:这根本不应该是家庭作业问题,我只需要通过一个例子来理解断言的功能。

可能你应该检查除析构函数之外的所有其他 public class 成员函数中的 class 不变量 function.And 你应该检查两次,首先是在进入函数之后,然后在退出函数之前,在这两个过程之间,你可以做一些不变量。

想想对象的生命周期:它由构造函数创建,由 const 成员函数检查,由非 const 成员函数修改,最后它被它的析构函数销毁。因此,就 class 不变量而言,它必须在构造函数的末尾和任何非 const 成员函数的末尾得到满足。这足以确保不变量在任何地方都得到满足。在进入函数时检查它不会使 class 健壮;它可能会检测到来自外部的覆盖,但这不是 class 呈现的抽象的一部分。所以:检查每个构造函数末尾和每个非const成员函数末尾的不变量。