class MyVal { int val; // when added next line, the gdb print work correctly when dimension >= 4 // int dummy[4]; public: MyVal() { val = 42; } MyVal(int _val) { val = _val; } // when remove the next copy ctor, the gdb print work correctly MyVal(const MyVal& other) { val = other.val; } }; class MyClassBase { public: virtual MyVal getMyVal() = 0; }; class MyClass : public MyClassBase { MyVal myVal; public: virtual MyVal getMyVal() { return myVal; } }; int main(int argc, const char **argv) { MyClassBase *myClass = new MyClass(); MyVal m; m = myClass->getMyVal(); m = myClass->getMyVal(); }