Mam ogólną klasę myClass
, która czasami potrzebuje przechowywać dodatkowe informacje o stanie w zależności od użycia. Zwykle robi się to z void*
, ale zastanawiałem się, czy mogę użyć std::unique_ptr<void, void(*)(void*)>
, aby pamięć została zwolniona automatycznie, gdy instancja klasy zostanie zniszczona. Problem polega na tym, że potrzebuję użyć niestandardowego deletera, ponieważ usunięcie pustki * powoduje niezdefiniowane zachowanie.Używanie std :: unique_ptr <void> z niestandardowym deleterem jako inteligentną pustą *
Czy istnieje sposób domyślnego skonstruowania std::unique_ptr<void, void(*)(void*)>
, tak, że nie mam go najpierw skonstruować przy użyciu dummy deletera, a następnie ustawić prawdziwy deleter, kiedy używam void*
dla struktury stanu? Czy istnieje lepszy sposób przechowywania informacji o stanie w klasie?
Oto przykładowy kod:
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;
};
Naprawdę nie ma sensu używać wskaźników "void", gdy mamy szablony. –
To brzmi jak problem [xy] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). – Pubby
Czy na pewno chcesz mieć tutaj 'unique_ptr', a nie' shared_ptr'? –