It doesn't make much sense to make checks like 'if(game)' if you never set game to 0. Using smart pointers instead. Does it fix segfaults? Probably.
authorunc0rr
Fri, 28 Oct 2011 19:20:35 +0400
changeset 6223 cc3eb9b7230f
parent 6222 96d10dcd6d84
child 6224 42b256eca362
child 6225 505643d4c23d
It doesn't make much sense to make checks like 'if(game)' if you never set game to 0. Using smart pointers instead. Does it fix segfaults? Probably.
QTfrontend/CMakeLists.txt
QTfrontend/hwform.cpp
QTfrontend/hwform.h
QTfrontend/team.cpp
QTfrontend/team.h
project_files/hedgewars.pro
--- a/QTfrontend/CMakeLists.txt	Fri Oct 28 13:10:46 2011 +0200
+++ b/QTfrontend/CMakeLists.txt	Fri Oct 28 19:20:35 2011 +0400
@@ -118,6 +118,7 @@
     gameuiconfig.h
     HWApplication.h
     hwform.h
+    team.h
     )
 
 set(hwfr_hdrs
--- a/QTfrontend/hwform.cpp	Fri Oct 28 13:10:46 2011 +0200
+++ b/QTfrontend/hwform.cpp	Fri Oct 28 19:20:35 2011 +0400
@@ -96,7 +96,12 @@
 QString playerHash;
 
 HWForm::HWForm(QWidget *parent, QString styleSheet)
-  : QMainWindow(parent), pnetserver(0), pRegisterServer(0), editedTeam(0), hwnet(0)
+  : QMainWindow(parent)
+  , game(0)
+  , pnetserver(0)
+  , pRegisterServer(0)
+  , editedTeam(0)
+  , hwnet(0)
 {
     // set music track
     SDLInteraction::instance().setMusicTrack(
@@ -106,7 +111,6 @@
 #ifdef USE_XFIRE
     xfire_init();
 #endif
-    game = NULL;
     gameSettings = new QSettings(cfgdir->absolutePath() + "/hedgewars.ini", QSettings::IniFormat);
     frontendEffects = gameSettings->value("frontend/effects", true).toBool();
     playerHash = QString(QCryptographicHash::hash(gameSettings->value("net/nick","").toString().toLatin1(), QCryptographicHash::Md5).toHex());
@@ -1162,7 +1166,7 @@
             ui.pageNetGame->pGameCFG->WeaponsName->currentIndex()
             ).toString();
 
-    CreateGame(ui.pageNetGame->pGameCFG, ui.pageNetGame->pNetTeamsWidget, ammo);
+	CreateGame(ui.pageNetGame->pGameCFG, ui.pageNetGame->pNetTeamsWidget, ammo);
 
     connect(game, SIGNAL(SendNet(const QByteArray &)), hwnet, SLOT(SendNet(const QByteArray &)));
     connect(game, SIGNAL(SendChat(const QString &)), hwnet, SLOT(chatLineToNet(const QString &)));
--- a/QTfrontend/hwform.h	Fri Oct 28 13:10:46 2011 +0200
+++ b/QTfrontend/hwform.h	Fri Oct 28 19:20:35 2011 +0400
@@ -22,6 +22,7 @@
 #include <QMainWindow>
 #include <QStack>
 #include <QTime>
+#include <QPointer>
 
 #include "netserver.h"
 #include "game.h"
@@ -156,11 +157,11 @@
         ID_PAGE_DRAWMAP         = 20,
         ID_PAGE_DATADOWNLOAD    = 21
         };
-    HWGame * game;
-    HWNetServer* pnetserver;
-    HWNetRegisterServer* pRegisterServer;
-    HWTeam * editedTeam;
-    HWNewNet * hwnet;
+	QPointer<HWGame> game;
+	QPointer<HWNetServer> pnetserver;
+	QPointer<HWNetRegisterServer> pRegisterServer;
+	QPointer<HWTeam> editedTeam;
+	QPointer<HWNewNet> hwnet;
     HWNamegen * namegen;
     AmmoSchemeModel * ammoSchemeModel;
     QStack<int> PagesStack;
--- a/QTfrontend/team.cpp	Fri Oct 28 13:10:46 2011 +0200
+++ b/QTfrontend/team.cpp	Fri Oct 28 19:20:35 2011 +0400
@@ -28,9 +28,10 @@
 #include "hats.h"
 
 HWTeam::HWTeam(const QString & teamname) :
-    m_difficulty(0),
-    m_numHedgehogs(4),
-    m_isNetTeam(false)
+	QObject(0)
+	, m_difficulty(0)
+	, m_numHedgehogs(4)
+	, m_isNetTeam(false)
 {
     m_name = teamname;
     OldTeamName = m_name;
@@ -54,8 +55,9 @@
 }
 
 HWTeam::HWTeam(const QStringList& strLst) :
-  m_numHedgehogs(4),
-  m_isNetTeam(true)
+	QObject(0)
+	, m_numHedgehogs(4)
+	, m_isNetTeam(true)
 {
     // net teams are configured from QStringList
     if(strLst.size() != 23) throw HWTeamConstructException();
@@ -80,9 +82,10 @@
 }
 
 HWTeam::HWTeam() :
-  m_difficulty(0),
-  m_numHedgehogs(4),
-  m_isNetTeam(false)
+	QObject(0)
+  , m_difficulty(0)
+  , m_numHedgehogs(4)
+  , m_isNetTeam(false)
 {
     m_name = QString("Team");
     for (int i = 0; i < HEDGEHOGS_PER_TEAM; i++)
@@ -106,6 +109,53 @@
     m_campaignProgress = 0;
 }
 
+HWTeam::HWTeam(const HWTeam & other) :
+		QObject(0)
+		, OldTeamName(other.OldTeamName)
+		, m_name(other.m_name)
+		, m_grave(other.m_grave)
+		, m_fort(other.m_fort)
+		, m_flag(other.m_flag)
+		, m_voicepack(other.m_voicepack)
+		, m_hedgehogs(other.m_hedgehogs)
+		, m_difficulty(other.m_difficulty)
+		, m_binds(other.m_binds)
+		, m_numHedgehogs(other.m_numHedgehogs)
+		, m_color(other.m_color)
+		, m_isNetTeam(other.m_isNetTeam)
+		, m_owner(other.m_owner)
+		, m_campaignProgress(other.m_campaignProgress)
+		, m_rounds(other.m_rounds)
+		, m_wins(other.m_wins)
+//	  , AchievementProgress(other.AchievementProgress)
+{
+
+}
+
+HWTeam & HWTeam::operator = (const HWTeam & other)
+{
+	if(this != &other)
+	{
+		OldTeamName = other.OldTeamName;
+		m_name = other.m_name;
+		m_grave = other.m_grave;
+		m_fort = other.m_fort;
+		m_flag = other.m_flag;
+		m_voicepack = other.m_voicepack;
+//		m_hedgehogs = other.m_hedgehogs;
+		m_difficulty = other.m_difficulty;
+//		m_binds = other.m_binds;
+		m_numHedgehogs = other.m_numHedgehogs;
+		m_color = other.m_color;
+		m_isNetTeam = other.m_isNetTeam;
+		m_owner = other.m_owner;
+		m_campaignProgress = other.m_campaignProgress;
+		m_rounds = other.m_rounds;
+		m_wins = other.m_wins;
+	}
+
+	return *this;
+}
 
 bool HWTeam::loadFromFile()
 {
--- a/QTfrontend/team.h	Fri Oct 28 13:10:46 2011 +0200
+++ b/QTfrontend/team.h	Fri Oct 28 19:20:35 2011 +0400
@@ -42,14 +42,17 @@
 };
 
 // class representing a team
-class HWTeam
+class HWTeam : public QObject
 {
+	Q_OBJECT
+
     public:
 
         // constructors
         HWTeam(const QString & teamname);
         HWTeam(const QStringList& strLst);
         HWTeam();
+		HWTeam(const HWTeam & other);
 
         // file operations
         static HWTeam loadFromFile(const QString & teamName);
@@ -93,9 +96,9 @@
         QStringList teamGameConfig(quint32 InitHealth) const;
 
         // comparison operators
-        bool operator==(const HWTeam& t1) const;
-        bool operator<(const HWTeam& t1) const;
-
+		bool operator == (const HWTeam& t1) const;
+		bool operator < (const HWTeam& t1) const;
+		HWTeam & operator = (const HWTeam & other);
 
 
     private:
@@ -109,11 +112,11 @@
         QString m_flag;
         QString m_voicepack;
         HWHog m_hedgehogs[HEDGEHOGS_PER_TEAM];
-        unsigned int m_difficulty;
+		quint8 m_difficulty;
         BindAction m_binds[BINDS_NUMBER];
 
         // class members that contain info for the current game setup
-        unsigned char m_numHedgehogs;
+		quint8 m_numHedgehogs;
         QColor m_color;
         bool m_isNetTeam;
         QString m_owner;
@@ -123,8 +126,6 @@
         unsigned int m_rounds;
         unsigned int m_wins;
         unsigned int AchievementProgress[MAX_ACHIEVEMENTS];
-
-
 };
 
 #endif
--- a/project_files/hedgewars.pro	Fri Oct 28 13:10:46 2011 +0200
+++ b/project_files/hedgewars.pro	Fri Oct 28 19:20:35 2011 +0400
@@ -93,7 +93,7 @@
     ../QTfrontend/achievements.h \
     ../QTfrontend/binds.h \
     ../QTfrontend/ui_hwform.h \
-    ../QTfrontend/KB.h \
+	../QTfrontend/KB.h \
     ../QTfrontend/hwconsts.h \
     ../QTfrontend/sdlkeys.h