Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
bgColor#FFcccc
langcpp

class B {
  public:
    B() { seize(); }
    virtual ~B() { release(); }
  protected:
    virtual void seize() {}
    virtual void release() {}
};

class D : public B {
  public:
    D() {}
    ~D() {}
  protected:
    void seize() {
        B::seize();
        // get derived resources...
    }
    void release() {
        // release derived resources...
        B::release();
    }
};

D x;

...

Code Block
bgColor#ccccff
langcpp

class B {
  public:
    B() {
        // seize base resources...
    }
    virtual ~B() {
        // release base resources...
    }
};

class D : public B {
  public:
    D() {
        // seize derived resources...
    }
    ~D() {
        // release derived resources...
    }
};

D x;

...

Code Block
bgColor#ccccff
langcpp

class A {
  A() {
    // f();   // WRONG!
    A::f();   // okay
  }
  virtual void f();
};

...

Rule

Severity

Likelihood

Remediation Cost

Priority

Level

OOP30-CPP

low

unlikely

medium

P2

L3

Automated Detection

Tool

Version

Checker

Description

 PRQA QA-C++

 
Include Page
PRQA QA-C++_v
PRQA QA-C++_v

4260,4261,4273,4274,

4275,4276,4277,4278,

4279,4280,4281,4282

 

 

Bibliography

[Dewhurst 03] Gotcha 75: Calling Virtual Functions in Constructors and Destructors
[Sutter 04] Item 49: Avoid calling virtual functions in constructors and destructors.
[Lockheed Martin 05] AV Rule 71.1 A class’s virtual functions shall not be invoked from its destructor or any of its constructors.

...

OOP07-CPP. Do not inherit from multiple classes that have distinct objects with the same name      13013. Object Oriented Programming (OOP)      OOP31DCL34-CPP. Ensure object construction invocations isn't mistaken for a function variable declarationDo not write syntactically ambiguous declarations