jeudi 8 juillet 2021

Checking whether a pointer has been set to an initialized object

Suppose I have a class called Entry:

template <typename K, typename V>
class Entry {
public:
    Entry(K const &key, V const &val, size_t const hash_val) :
        key(key), val(val), hash_val(hash_val), empty(false){
    }

    K getKey() const {
        return key;
    }

    V getValue() const {
        return val;
    }

    size_t getHash() const {
        return hash_val;
    }

    bool isEmpty() const{
        return empty;
    }
private:
    // key-value pair
    K key;
    V val;
    // Store hash for reallocation
    size_t hash_val;
    // Store empty state
    bool empty;
};

Then I create an array of objects

Entry<K, V>** entries = new Entry<K, V> *[100]; 

If I call entries[0]->isEmpty(), I get a segmentation fault. This makes sense to me, since I haven't actually instantiated a new object in memory. However, I want to be able to check whether a slot in the array actually points to a valid object. Currently, I've been setting each pointer to nullptr so I can check for equality later, but I was wondering if there was a better way.

Aucun commentaire:

Enregistrer un commentaire