[C++] Constructors / Destructors
1
Name:
Snake4D
2012-03-22 16:28
I'm a beginner programmer, and I was wondering...
I need a unique ID for my object in the game
so I thought I define a global class that holds the global id, and when I call the constructor of an object it will be incremented, while calling the destructor of that object it decrements it.
Is it true that for every constructor call there will be a corresponding destructor?
second... is it possible to compare the memory adresses (this should be a unique id enough) of the objects instead of using an id_holder?
class id_holder{
private:
int id_count;
public:
id_holder() {id_count = 0 ; std::cout<< "unique_id: I'm constructed"<<std::endl;}
~id_holder(){std::cout<<"unique_id: I'm destructed"<<std::endl;}
void increment_id(){id_count ++;};
void decrement_id(){id_count --;};
int get_id() {return id_count;};
};
class BaseObject {
protected:
void increment_id();
void decrement_id();
public:
virtual ~BaseObject(){decrement_id();}
BaseObject();
BaseObject(V2 pos, ObjectType idobj, double s, Color col);
};
BaseObject::BaseObject(){
//stuff
increment_id();
unique_id = bObj_id_counter.get_id();
}
BaseObject::BaseObject(V2 pos, ObjectType idobj, double s, Color col){
//stuff
increment_id();
unique_id = bObj_id_counter.get_id();
}
2
Name:
Snake4D
2012-03-22 16:32
void BaseObject::increment_id(){
bObj_id_counter.increment_id();
}
void BaseObject::decrement_id(){
bObj_id_counter.decrement_id();
}
3
Name:
Anonymous
2012-03-22 16:36
SJJWWJJESSEWEJWSEJSEWSSEJEEEWEJEWJEWEJSESEJSWEEWSSSWJSWSJWSJESSE WWWSJEJWEESEESJWEEEWSJWEJSWSWSSWWJESEJEWJSWSSEWWWEEJJEEEJJWSEJJS WSESSSSSWJ JEWS SWJWSWWJWJEJEJWWEEEE JEWS WSJSEWWWJESJWSWJEJSSWWEJJE JJSSWEWEJWWWSSJWSSWJWSSJESEEJWSWJJJESJJWWESJSWEEJJESEJJWJSWWEJJJ WSWESJWSEWSEWSEJEWWWSWJEWJSSSWWEWWSWJJJESSESSSESSEJSSEESSWSSJSJJ JJEJWSEWSEEESEJJWSWJSJEEEWSJSJEJWSJWSEJSESEJSSEJWWWSJWJSESESEWEW WJSWJJJSEWESSESJJEJSWEEJSWEWWWSWJEJWEEEEESESJJEESJEJWSEEJESSEESS JEJSEJSJJSSWWWJSJSEESWWJSEJESWEJJSJJJWJEWWEESWSEJWESSJSJJJWJJSEE SJSWWJWSWESESWSEEESJWJEJWSWSWJ JEWS JEEWEWWEJSSEJJJSSJEEESWJESWJSW EJWESSWSEESEJWEWJJSESEEESSWWJJJWWSJSSWWJJEWWWWSESWJJSEJJSEJJEJEE JJWSEWWJSEJSSSWSWSJWESEEWSWSEJWWWSSJESJJWSSEWEWEJSEWWSSEWJWJWEEJ JEJJEJJWWEWSJESJEJWJWWWSJSESEJJWSWJWEJSJWSJESWEJWWWESSESWJJEJSEW EWWJSJJJEJESJSWWSWWJWEESEESSEEJSSSWJJJWWJWEWEJEEJJJESJJJWSEJJEJS EJWWEJSSSSSSEEWWWEJEJSSJSWWJSWWSEWSEESSWEJWSJWWEEWSJESEJJSJSWJEW EJSWWESSJESSEESJJJJJESS JEWS SJWEJSJWEWEJJJSJWWEWW JEWS WJESJJWJWSEJ WJWSWEJJSEWWSJESEEWSSSEEWWJSESJWESESSJJEEWJSEJWSJJSESJEJJEJESWEE EWJEJEWEESSWSJSJESESSJJJEJJESWWJWEJWWEWESEJSSSWJWEJESESSWWSEWJEW JEEEESWWESJSSEWSJSEESSJWEWE JEWS SJJEEEWEJWWSWEEWSEJJJEJJJEESJJJSW JSSSEE JEWS EJJWSWESJJSWSSEEJWWJJSJEJWJEESSWEJWSSJJWEJSEJESSEESSJE EESESEJSEWSJJJJJSWWJWJJWWWJJEEESESJSWJEWESESWSJJSSJWWJWSSJJSJWSS ESEWJJJSEESJEJEESEJJJWJWEWWEWWESEEEJWWEJSESJSSWJJJSEEEJEJSJJWWWW WJWJJE JEWS WEJSJEEWSJJSSWESSEESWEEJSWSSSSSWSSEEWESEWJJSWSESESJJSJ WSEJJWSSWWJWJSWEWWJESWJWESWSWEJWJWJSESWJJEEJJJSEWWSEWWWJJESEEWSS JJJSEWSEWJEWJEEWWWWJSJJWWJSWWEESEWESJSEJJSSWJEWEEESWJSEJSSJWEEJE JJEJJWEES JEWS SSSSSWESESWJWJEEJSSWWSJJWESJEJJJJSSJSWWEWEEEWJSWEWJ SWJJJEWJESJSWEWSWSSJSJSJEJJEJSSESJEWWJEJWJJWEWSEEEWSEJJSSJJJSWJW EEWSEESEJSJEJJSSESJW JEWS ESJWSWEWWJWJEJWJSJEJJSESSWWWJJSSWJSSWJEW WJEEJEJEESJEWWJEJJEEJESJWSWSSEWEEEJSSSEJSJEJEESSWEWEJSWSWJWSEEJW WEJJEJSWSJEEWJWESEJSWWJSEWESSESWSSJWSWESWSWSEWWSWWJEWWEJJEEEWJSJ WEJWSWSWJEEJJSS JEWS JEJJSSEEEJWSSSJJWJJESJSWSEEJJJWWJEJJJSEEWEJES WSSESJSESE JEWS SJWWWWSSJJEWJEWWEWEWEWWJEWEJESSWESJJSSWEEEWJSWEJEE EEWSSSWJWJWWEEWWEEJWJJSSEEJWESJWJEJJWJSWWEJEWESEWSSSJESEEWEWWWWW SWEWWEEWWWJWEEJEWESSSJSWWEJESSSEEJWSWESEJWEJWEWJJJSSJEWJSWEWJEEW JJSSJJEWJESWWEEEJSWSWSJSWWEWEJWJJWWWWJSWWESWWEWJEWEESEWJWSSSJESS EJWSWEEWSWWWEEWJWSSJWSESWWSJSWEWSEWEEWEESJSWJWWJJJJEEWSWEWEJJJJE WJSJJWJEJWWWESEESWJWESWSSJWJWSESWSEJWWESWJWEEEWWJWSWSEJWSEJSEJJS EWSWEJJSEEW JEWS EJESWWEEWEJJSSJ JEWS EWJEJWEJESJWSEJWSWJSJWSSEESJSJ EWJSEWSSWEWEESEJEWEESJSJJEJESJJEESEWJWJSJWSJEE JEWS SEJSEJJJSWSSWS JSEWWWESEJJWEEESJWWESWSESWSSEESEJJWSSSEJEWWSEWESJJJESWSJSWJWWSES SSWSSWESSSEWWWWJESWWWWSSJJJSWJEJESWJWWSEWEEEWEJEWJJSEEEWWJWJWEWE WJESWSSSEWWJSESWEEEJSEWEEJWSWEJWJSJSSWJSWJEEEJEJEEWWJSSEJJJSWEWE JWWEJEEJSWSJWJESESSJWSSWESWWJEJEJJSJSJJEWESJWSEJSJWWJWSEJSWEJJSJ WJSEJJSJJJESEEWSSEJWWSEEJ JEWS SEEWEEJEESEEJWSWJWWSJWSEJJEJWJSSJEW JJJWSJWESWWESEJSWWESWSESSWWSSWESWWWEJEWJSEWWEJWSSWWSWEWSSESJWSEE JJWSWJWWSJEJWSWWJEWEWSJWEEJESJEWESSEJSWWSJJEJSJWJEESESJWSJWSJEEW JJWEEJSSWEEWSEWSEEJWEEEEWSWJESSWSWWEWJJEWJSWEWESSEEESJWJWWEEJSSE WJJEWWSEJJWEWWSJEEJJSEJSWEWSSSSSJEEJEEEEWWEJEJJEEWWWSJEJSJ JEWS JS WSSJWSWEWSEWJWWEWJWWSSESJEEEJSJSSWWSWEJWEWEESJEWEWE JEWS JEJJWSWJS SWSWWSSSJJESWEJJEEJJWWEJWWWEESWSSSJJWWJEWWESSWWWJWJWSWJJSJSSSEES WSEWSWWSEJSJWJEWJEJJJWSWSEJJWEJWEWJWWEWSEEWJJEWJWEJWWWSWSJSWJJWS WSWJWEWSWESSESEJEEWWWEJWESWWEESEEEJESWJSSEEJEWJSWJSSJWSJWSESJEEW SSEWEEWJESJEJSSJSJWJEWEESSSEJSWJWWJEWEWSEJWSESSSWWWEWJSSSSJSESWE SJSJSWSWWWEJWEWEJSESSJEJJJSWJSWWJSESSWEEESWEEEJJJWJEESJSWJSSJSJS JWSEJSSEJSWEEEWJWSWJEWJWSWJWWEEEJEJJSSSWWEJWJWESESJWEWESWSJSESWJ EWEEEJWSWEJJEEJJEWJEWWJWWJWJJEEEEEJJWSJWSJEJSWEWEWEWJWJJWWWSSSJE EEEJWSWESESSEWWEEJSJEESSSEJSSESSSWWSJSJESJEEJWEWEEJWEEJWEEJJWWSS JJJEESESWJSJJJJJJEWEEWJEWJEWWEESWJJSESEWSJWJEJWEJSESJSJJJSSEESJS SSSESEJEJSJWESSJEESSSEEEJJSSJWEWJWWWWSWJSSEJEJJEJWJEJWEWWWSESJES WJWSSSWJJJJJJEJSEESSJWWSJJWSSJESWSJWSSWSEEWJWEWEJEWJWWSJSJWESSJW JWEEJJSSJJEEJESWJWSSEWSSWSJWWSWEEJS JEWS WESJWEJSEESJJJWSWSJJWWEJJ WJSSWWEWESJEEEEEJJSJJSWJEWEWWSEJESJWEEEWEWESSWSJEEWJWWEWJEJJEEEE WWWJSEWEWESSEWSESJJESJEWWWWJWWSWWEJESJEWWJSJJJEWWEESJSJEEWEWWWJW EJWSWSWWEWSSSEEJJWWSSEJEEWEEEWSSEJJWWWWSEWJEEEWWWJWWWJSSWEJEWWSE SWSJJWWSESWE JEWS WWESEWSSESEJJEWWWWWSJJJWEWEJEEWWJJESSSEJWJWWJEJJ
4
Name:
Anonymous
2012-03-22 16:38
I hope you are trolling. Just make a static member variable that holds the global id.
[code]
class BaseObject
{
private:
static unsigned int global_id = 0;
unsigned int object_id;
public:
BaseObject() {
object_id = global_id++;
}
};
5
Name:
2
2012-03-22 16:42
>>1
Also, just in case you weren't a troll, all you want is a global id right? Static member variable is of course the correct way.
Your id_holder class is silly. It behaves just like normal integer, but it looks more complicated (instead of id++, you must type fuctard_object.increment()). Don't make unnecessary classes. That's a code smell.
http://en.wikipedia.org/wiki/Code_smell
6
Name:
Anonymous
2012-03-22 16:54
Is it true that for every constructor call there will be a corresponding destructor?
If the object is allocated dynamically, you need to delete it or use a smart pointer and let it clean up for you. Otherwise, the destructor won't be called.
Is it possible to compare the memory addresses?
Yes, it's possible, but bear in mind that when you copy an object, it will have a different address. Depending on what you're trying to achieve, your best option may be to generate a hash based on the data of the object and compare that.
7
Name:
Anonymous
2012-03-23 5:21
C++ is un scientific and ultimately constructive / destructive .