Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon.

Pages: 1-

[C++] Constructors / Destructors

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();
}

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();
}

Name: Anonymous 2012-03-22 16:36

SJJWWJJESSEWEJWSEJSEWSSEJEEEWEJEWJEWEJSESEJSWEEWSSSWJSWSJWSJESSE WWWSJEJWEESEESJWEEEWSJWEJSWSWSSWWJESEJEWJSWSSEWWWEEJJEEEJJWSEJJS WSESSSSSWJJEWSSWJWSWWJWJEJEJWWEEEEJEWSWSJSEWWWJESJWSWJEJSSWWEJJE JJSSWEWEJWWWSSJWSSWJWSSJESEEJWSWJJJESJJWWESJSWEEJJESEJJWJSWWEJJJ WSWESJWSEWSEWSEJEWWWSWJEWJSSSWWEWWSWJJJESSESSSESSEJSSEESSWSSJSJJ JJEJWSEWSEEESEJJWSWJSJEEEWSJSJEJWSJWSEJSESEJSSEJWWWSJWJSESESEWEW WJSWJJJSEWESSESJJEJSWEEJSWEWWWSWJEJWEEEEESESJJEESJEJWSEEJESSEESS JEJSEJSJJSSWWWJSJSEESWWJSEJESWEJJSJJJWJEWWEESWSEJWESSJSJJJWJJSEE SJSWWJWSWESESWSEEESJWJEJWSWSWJJEWSJEEWEWWEJSSEJJJSSJEEESWJESWJSW EJWESSWSEESEJWEWJJSESEEESSWWJJJWWSJSSWWJJEWWWWSESWJJSEJJSEJJEJEE JJWSEWWJSEJSSSWSWSJWESEEWSWSEJWWWSSJESJJWSSEWEWEJSEWWSSEWJWJWEEJ JEJJEJJWWEWSJESJEJWJWWWSJSESEJJWSWJWEJSJWSJESWEJWWWESSESWJJEJSEW EWWJSJJJEJESJSWWSWWJWEESEESSEEJSSSWJJJWWJWEWEJEEJJJESJJJWSEJJEJS EJWWEJSSSSSSEEWWWEJEJSSJSWWJSWWSEWSEESSWEJWSJWWEEWSJESEJJSJSWJEW EJSWWESSJESSEESJJJJJESSJEWSSJWEJSJWEWEJJJSJWWEWWJEWSWJESJJWJWSEJ WJWSWEJJSEWWSJESEEWSSSEEWWJSESJWESESSJJEEWJSEJWSJJSESJEJJEJESWEE EWJEJEWEESSWSJSJESESSJJJEJJESWWJWEJWWEWESEJSSSWJWEJESESSWWSEWJEW JEEEESWWESJSSEWSJSEESSJWEWEJEWSSJJEEEWEJWWSWEEWSEJJJEJJJEESJJJSW JSSSEEJEWSEJJWSWESJJSWSSEEJWWJJSJEJWJEESSWEJWSSJJWEJSEJESSEESSJE EESESEJSEWSJJJJJSWWJWJJWWWJJEEESESJSWJEWESESWSJJSSJWWJWSSJJSJWSS ESEWJJJSEESJEJEESEJJJWJWEWWEWWESEEEJWWEJSESJSSWJJJSEEEJEJSJJWWWW WJWJJEJEWSWEJSJEEWSJJSSWESSEESWEEJSWSSSSSWSSEEWESEWJJSWSESESJJSJ WSEJJWSSWWJWJSWEWWJESWJWESWSWEJWJWJSESWJJEEJJJSEWWSEWWWJJESEEWSS JJJSEWSEWJEWJEEWWWWJSJJWWJSWWEESEWESJSEJJSSWJEWEEESWJSEJSSJWEEJE JJEJJWEESJEWSSSSSSWESESWJWJEEJSSWWSJJWESJEJJJJSSJSWWEWEEEWJSWEWJ SWJJJEWJESJSWEWSWSSJSJSJEJJEJSSESJEWWJEJWJJWEWSEEEWSEJJSSJJJSWJW EEWSEESEJSJEJJSSESJWJEWSESJWSWEWWJWJEJWJSJEJJSESSWWWJJSSWJSSWJEW WJEEJEJEESJEWWJEJJEEJESJWSWSSEWEEEJSSSEJSJEJEESSWEWEJSWSWJWSEEJW WEJJEJSWSJEEWJWESEJSWWJSEWESSESWSSJWSWESWSWSEWWSWWJEWWEJJEEEWJSJ WEJWSWSWJEEJJSSJEWSJEJJSSEEEJWSSSJJWJJESJSWSEEJJJWWJEJJJSEEWEJES WSSESJSESEJEWSSJWWWWSSJJEWJEWWEWEWEWWJEWEJESSWESJJSSWEEEWJSWEJEE EEWSSSWJWJWWEEWWEEJWJJSSEEJWESJWJEJJWJSWWEJEWESEWSSSJESEEWEWWWWW SWEWWEEWWWJWEEJEWESSSJSWWEJESSSEEJWSWESEJWEJWEWJJJSSJEWJSWEWJEEW JJSSJJEWJESWWEEEJSWSWSJSWWEWEJWJJWWWWJSWWESWWEWJEWEESEWJWSSSJESS EJWSWEEWSWWWEEWJWSSJWSESWWSJSWEWSEWEEWEESJSWJWWJJJJEEWSWEWEJJJJE WJSJJWJEJWWWESEESWJWESWSSJWJWSESWSEJWWESWJWEEEWWJWSWSEJWSEJSEJJS EWSWEJJSEEWJEWSEJESWWEEWEJJSSJJEWSEWJEJWEJESJWSEJWSWJSJWSSEESJSJ EWJSEWSSWEWEESEJEWEESJSJJEJESJJEESEWJWJSJWSJEEJEWSSEJSEJJJSWSSWS JSEWWWESEJJWEEESJWWESWSESWSSEESEJJWSSSEJEWWSEWESJJJESWSJSWJWWSES SSWSSWESSSEWWWWJESWWWWSSJJJSWJEJESWJWWSEWEEEWEJEWJJSEEEWWJWJWEWE WJESWSSSEWWJSESWEEEJSEWEEJWSWEJWJSJSSWJSWJEEEJEJEEWWJSSEJJJSWEWE JWWEJEEJSWSJWJESESSJWSSWESWWJEJEJJSJSJJEWESJWSEJSJWWJWSEJSWEJJSJ WJSEJJSJJJESEEWSSEJWWSEEJJEWSSEEWEEJEESEEJWSWJWWSJWSEJJEJWJSSJEW JJJWSJWESWWESEJSWWESWSESSWWSSWESWWWEJEWJSEWWEJWSSWWSWEWSSESJWSEE JJWSWJWWSJEJWSWWJEWEWSJWEEJESJEWESSEJSWWSJJEJSJWJEESESJWSJWSJEEW JJWEEJSSWEEWSEWSEEJWEEEEWSWJESSWSWWEWJJEWJSWEWESSEEESJWJWWEEJSSE WJJEWWSEJJWEWWSJEEJJSEJSWEWSSSSSJEEJEEEEWWEJEJJEEWWWSJEJSJJEWSJS WSSJWSWEWSEWJWWEWJWWSSESJEEEJSJSSWWSWEJWEWEESJEWEWEJEWSJEJJWSWJS SWSWWSSSJJESWEJJEEJJWWEJWWWEESWSSSJJWWJEWWESSWWWJWJWSWJJSJSSSEES WSEWSWWSEJSJWJEWJEJJJWSWSEJJWEJWEWJWWEWSEEWJJEWJWEJWWWSWSJSWJJWS WSWJWEWSWESSESEJEEWWWEJWESWWEESEEEJESWJSSEEJEWJSWJSSJWSJWSESJEEW SSEWEEWJESJEJSSJSJWJEWEESSSEJSWJWWJEWEWSEJWSESSSWWWEWJSSSSJSESWE SJSJSWSWWWEJWEWEJSESSJEJJJSWJSWWJSESSWEEESWEEEJJJWJEESJSWJSSJSJS JWSEJSSEJSWEEEWJWSWJEWJWSWJWWEEEJEJJSSSWWEJWJWESESJWEWESWSJSESWJ EWEEEJWSWEJJEEJJEWJEWWJWWJWJJEEEEEJJWSJWSJEJSWEWEWEWJWJJWWWSSSJE EEEJWSWESESSEWWEEJSJEESSSEJSSESSSWWSJSJESJEEJWEWEEJWEEJWEEJJWWSS JJJEESESWJSJJJJJJEWEEWJEWJEWWEESWJJSESEWSJWJEJWEJSESJSJJJSSEESJS SSSESEJEJSJWESSJEESSSEEEJJSSJWEWJWWWWSWJSSEJEJJEJWJEJWEWWWSESJES WJWSSSWJJJJJJEJSEESSJWWSJJWSSJESWSJWSSWSEEWJWEWEJEWJWWSJSJWESSJW JWEEJJSSJJEEJESWJWSSEWSSWSJWWSWEEJSJEWSWESJWEJSEESJJJWSWSJJWWEJJ WJSSWWEWESJEEEEEJJSJJSWJEWEWWSEJESJWEEEWEWESSWSJEEWJWWEWJEJJEEEE WWWJSEWEWESSEWSESJJESJEWWWWJWWSWWEJESJEWWJSJJJEWWEESJSJEEWEWWWJW EJWSWSWWEWSSSEEJJWWSSEJEEWEEEWSSEJJWWWWSEWJEEEWWWJWWWJSSWEJEWWSE SWSJJWWSESWEJEWSWWESEWSSESEJJEWWWWWSJJJWEWEJEEWWJJESSSEJWJWWJEJJ

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++;
    }
};

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

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.

Name: Anonymous 2012-03-23 5:21

C++ is unscientific and ultimately constructive / destructive.

Don't change these.
Name: Email:
Entire Thread Thread List