make ctor with values explicit; make operator= self-assignment safe
authorKonrad Rosenbaum <konrad@silmor.de>
Thu, 16 Feb 2012 18:23:27 +0000 (19:23 +0100)
committerKonrad Rosenbaum <konrad@silmor.de>
Thu, 16 Feb 2012 18:29:01 +0000 (19:29 +0100)
woc/qt/qtclass.cpp
woc/qt/qtconst.h
woc/qt/qtctrans.cpp
woc/qt/qtstrans.cpp

index 271abee..df29844 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2009-2011 by Konrad Rosenbaum <konrad@silmor.de>
+// Copyright (C) 2009-2012 by Konrad Rosenbaum <konrad@silmor.de>
 // protected under the GNU GPL version 3 or at your option any newer.
 // See COPYING.GPL file that comes with this distribution.
 //
@@ -231,6 +231,7 @@ void WocQtClass::classDeserializer(const WocClass&cls,MFile&hdr,MFile&src,QStrin
        scd+="}\n";
        hcd+="\t"+cn+"& operator=(const "+cn+"&);\n";
        scd+=cn+"& "+cn+"::operator=(const "+cn+"&o)\n{\n";
+       scd+="\tif(this == &o)return *this;\n";
        scd+="\t"+cnb+"::operator=(o);\n";
        for(int i=0;i<k.size();i++)
                scd+="\tmp_"+k[i]+"=o.mp_"+k[i]+";\n";
@@ -327,6 +328,7 @@ void WocQtClass::classDeserializer(const WocClass&cls,MFile&hdr,MFile&src,QStrin
                }
        }
        scd+="}\n";
+       hcd+="\tvirtual ~"+cn+"(){}\n";
        
        //write it...
        hdr.write(hcd.toAscii());
index f32d608..f17f0f0 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2009-2011 by Konrad Rosenbaum <konrad@silmor.de>
+// Copyright (C) 2009-2012 by Konrad Rosenbaum <konrad@silmor.de>
 // protected under the GNU GPL version 3 or at your option any newer.
 // See COPYING.GPL file that comes with this distribution.
 //
index c978e56..03a48d2 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2009-2011 by Konrad Rosenbaum <konrad@silmor.de>
+// Copyright (C) 2009-2012 by Konrad Rosenbaum <konrad@silmor.de>
 // protected under the GNU GPL version 3 or at your option any newer.
 // See COPYING.GPL file that comes with this distribution.
 //
@@ -161,7 +161,7 @@ void WocQtClientTransaction::genTors(QtCTrans&ct)
 {
        //define parametric constructor
        ct.hcd+="  protected:\n";
-       ct.hcd+="\t"+ct.cn+"("+ct.xinlist+");\n";
+       ct.hcd+="\texplicit "+ct.cn+"("+ct.xinlist+");\n";
        //parametric constructor implementation
        ct.scd+=ct.cn+"::"+ct.cn+"("+ct.xinlist+")\n\t:"+m_transbase+"(iface)\n{\n";
        ct.scd+="\tnew "+ct.cnp+"(this);\n";
@@ -183,12 +183,13 @@ void WocQtClientTransaction::genTors(QtCTrans&ct)
        ct.hcd+="\t"+ct.cn+"& operator=(const "+ct.cn+"&);\n";
        //copy operator implemented
        ct.scd+=ct.cn+"& "+ct.cn+"::operator=(const "+ct.cn+"&t)\n{\n";
+       ct.scd+="\tif(this == &t)return *this;\n";
        ct.scd+="\t"+m_transbase+"::operator=(t);\n";
        ct.scd+="\tp->detach(this);t.p->attach(this);\n";
        ct.scd+="\treturn *this;\n}\n\n";
        
        //destructor
-       ct.hcd+="\t~"+ct.cn+"();\n";
+       ct.hcd+="\tvirtual ~"+ct.cn+"();\n";
        ct.scd+=ct.cn+"::~"+ct.cn+"()\n{\n\tp->detach(this);\n}\n\n";
 }
 
index e438ff8..a4ca2cc 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2009-2011 by Konrad Rosenbaum <konrad@silmor.de>
+// Copyright (C) 2009-2012 by Konrad Rosenbaum <konrad@silmor.de>
 // protected under the GNU GPL version 3 or at your option any newer.
 // See COPYING.GPL file that comes with this distribution.
 //
@@ -143,7 +143,7 @@ void WocQtServerTransaction::genTors(QtSTrans&ct)
        //define parametric constructor
        ct.hcd+="  protected:\n";
        ct.hcd+="\tfriend class "+m_parent->ifaceClassName()+";\n";
-       ct.hcd+="\t"+ct.cn+"(QString,const WServerRequest&);\n";
+       ct.hcd+="\texplicit "+ct.cn+"(QString,const WServerRequest&);\n";
        //parametric constructor implementation
        ct.scd+=ct.cn+"::"+ct.cn+"(QString iface,const WServerRequest&request)\n";
        ct.scd+="\t:"+m_transbase+"(iface)\n{\n";
@@ -165,6 +165,7 @@ void WocQtServerTransaction::genTors(QtSTrans&ct)
        ct.hcd+="\t"+ct.cn+"& operator=(const "+ct.cn+"&);\n";
        //copy operator implemented
        ct.scd+=ct.cn+"& "+ct.cn+"::operator=(const "+ct.cn+"&t)\n{\n";
+       ct.scd+="\tif(this==&t)return *this;\n";
        ct.scd+="\t"+m_transbase+"::operator=(t);\n";
        ct.scd+="\tp->detach(this);t.p->attach(this);\n";
        ct.scd+="\treturn *this;\n}\n\n";