У меня есть такой класс:
Texture
{
int ID
public:
Texture(std::string name){ ID = make_texture(name); }
~Texture(){ delete_texture(ID); }
};
но проблема в том, что когда я перемещаю класс, вызывается деструктор, поэтому идентификатор становится недействительным.
моя текущая реализация будет выглядеть примерно так:
Texture
{
static std::unordered_map<int> m;
int ID
public:
Texture(std::string name){
ID = make_texture(name);
m[ID]++;
}
Texture(Texture& obj){ *this = obj; }
Texture &operator=(Texture& obj){
ID = obj.ID;
m[ID]++;
}
~Texture(){
if (!--m[ID])
delete_texture(ID);
}
};
//was coded in stack overflow so syntax may be a bit off
но что действительно хорошо, так это класс, от которого я мог бы унаследовать:
Texture : public ref_count<int>
{
int ID
public:
Texture(std::string name){ ID = make_texture(name); }
key(){return ID;} // inherited from ref_count
on_delete(){ delete_texture(ID); } // inherited from ref_count
};
поэтому мой вопрос: существует ли такой удобный класс в стандартной библиотеке / бусте? Или каков наилучший способ достичь этого без применения собственного подсчета ссылок.