Ich benutze die C++ HashMap (unordered_map) mit strings als Schlüssel,
weil ich davon ausgehe, dass der hashCode und equal korrekt implementiert sind.
Hier die Header-Datei (angepasst):
Hier die Cpp-Datei (angepasst):
uint8SizedBytes ist ein struct
um byte (char) array und Länge zusammenzuhalten.
uint16Option_t ist ein struct um optional einen uint16_t-Wert zurückgeben zu können:
Irgendwie sieht man sicher, dass ich vorher Java gemacht habe.
Meine Frage ist nun, ob nach dem Aufruf der Methode clear() aller allokierter Speicher freigegeben wurde.
key_asString liegt auf dem Stack (hat zwar Heap-Speicher), aber sollte am Ende der insert und get-Methode freigegeben sein.
Danke.
weil ich davon ausgehe, dass der hashCode und equal korrekt implementiert sind.
Hier die Header-Datei (angepasst):
C++:
#include <unordered_map>
class MyMap
{
public:
MyMap();
~MyMap();
void clear();
void insert(uint8SizedBytes _keyBytes, uint16_t _value);
uint16Option_t get(uint8SizedBytes _keyBytes);
private:
// we use string as key because is ready for using
std::unordered_map<std::string, uint16_t> map;
};
Hier die Cpp-Datei (angepasst):
C++:
#include "MyMap.h"
MyMap::MyMap()
{
}
MyMap::~MyMap()
{
this->clear();
}
void Mymap::clear()
{
this->map.clear();
}
void MyMap::insert(
uint8SizedBytes _keyBytes,
uint16_t _value)
{
std::string key_asString{reinterpret_cast<char*>(_keyBytes.dataPtr), _keyBytes.dataLength};
// TODO check for using copy constructor on using subscription operator
this->map[key_asString] = _value;
}
uint16Option_t MyMap::get(uint8SizedBytes _keyBytes)
{
std::string key_asString{reinterpret_cast<char*>(_keyBytes.dataPtr), _keyBytes.dataLength};
auto it = this->map.find(key_asString);
uint16Option_t valueOption = uint16OptionEmpty;
if (it != this->map.end())
{
valueOption.value = it->second;
valueOption.isPresent = true;
}
return valueOption;
}
uint8SizedBytes ist ein struct
C++:
typedef struct uint8SizedBytes
{
uint8_t dataLength;
uint8_t* dataPtr;
}uint8SizedBytes;
um byte (char) array und Länge zusammenzuhalten.
uint16Option_t ist ein struct um optional einen uint16_t-Wert zurückgeben zu können:
C++:
typedef struct{
bool isPresent = false;
uint16_t value;
}uint16Option_t;
const uint16Option_t uint16OptionEmpty = {false, 0};
Irgendwie sieht man sicher, dass ich vorher Java gemacht habe.
Meine Frage ist nun, ob nach dem Aufruf der Methode clear() aller allokierter Speicher freigegeben wurde.
key_asString liegt auf dem Stack (hat zwar Heap-Speicher), aber sollte am Ende der insert und get-Methode freigegeben sein.
Danke.