Ich habe eine generische Klasse myClass
, die manchmal zusätzliche Statusinformationen abhängig von der Verwendung speichern muss. Dies geschieht normalerweise mit einer void*
, aber ich frage mich, ob ich eine std::unique_ptr<void, void(*)(void*)>
verwenden könnte, so dass der Speicher automatisch freigegeben wird, wenn die Klasseninstanz zerstört wird. Das Problem ist, dass ich dann einen benutzerdefinierten Deleter verwenden muss, da das Löschen eines void * zu undefiniertem Verhalten führt.Verwenden von Std :: unique_ptr <void> mit einem benutzerdefinierten Deleter als eine intelligente void *
Gibt es eine Möglichkeit, ein std::unique_ptr<void, void(*)(void*)>
Standard zu konstruieren, so dass ich es nicht zuerst mit einem Dummy-Löscher konstruieren Sie dann einen echten Deleter gesetzt, wenn ich die void*
für eine State-Struktur verwenden? Oder gibt es eine bessere Möglichkeit, Statusinformationen in einer Klasse zu speichern? Hier
ist ein Beispielcode:
void dummy_deleter(void*) { }
class myClass
{
public:
myClass() : m_extraData(nullptr, &dummy_deleter) { }
// Other functions and members
private:
std::unique_ptr<void, void(*)(void*)> m_extraData;
};
Es gibt wirklich nicht viel Verwendung für 'void' Zeiger, wenn wir Vorlagen haben. –
Das klingt wie ein [xy-Problem] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). – Pubby
Sind Sie sicher, dass Sie hier ein 'unique_ptr' und kein 'shared_ptr' wollen? –