v 0. Pasted by W as cpp at 2007-06-08 15:36:43 MSK and set expiration to never.

Paste will expire never.

  1.  
  2. #include <assert.h>
  3. #include <string.h>
  4. #include <string>
  5.  
  6. struct ComplexClassWithVirtualMembers_POD
  7. {
  8.    // std::string s; //тогда способ с {} продолжит работу нормально, а ZeroMe - продолжит подрывную работу =)
  9.  
  10.    int i;
  11.    float f;   
  12.    void *p;
  13.  
  14.    void ZeroMe()
  15.    {
  16.        memset(this, 0, sizeof(*this));
  17.    }
  18. };
  19.  
  20. class ComplexClassWithVirtualMembers: private ComplexClassWithVirtualMembers_POD
  21. {
  22. public:
  23.     ComplexClassWithVirtualMembers()
  24.     {
  25.  
  26.         // --------
  27.         ComplexClassWithVirtualMembers_POD &x = *this;
  28.         ComplexClassWithVirtualMembers_POD zero = {};
  29.         x = zero;
  30.         // --------
  31.         ZeroMe(); //или так.
  32.  
  33.         assert(this->i == 0);
  34.         assert(this->f == 0.0f);
  35.         assert(this->p == NULL);
  36.     }
  37.  
  38.     virtual ~ComplexClassWithVirtualMembers() {}
  39. };
  40.  
  41. int main()
  42. {
  43.     ComplexClassWithVirtualMembers test;
  44. }
  45.  
  46.  
  47.  
  48.  
  49.