muszę coś zrobić, jak to często więcej niż:Jak połączyć korzystanie z std :: wiążą z std :: shared_ptr
AsyncOperation * pAsyncOperation = new AsyncOperation();
auto bindOperation = std::bind(&AsyncOperation::operator(), std::ref(*pAsyncOperation));
std::thread thread(bindOperation);
thread.join();
z AsyncOperation
jest każda klasa zwyczaj wykonawczych operator()
(znany również jako funktora lub obiekt funkcji).
Czy można wskazać std::bind
, aby użyć std::shared_ptr
zamiast std::ref
? Zapobiegłoby to wyciekom pamięci, bez konieczności przechowywania odniesienia na pAsyncOperation
, i automatycznie usuwałbym AsyncOperation
na końcu wątku, czyli na końcu tego asynchronicznego zadania.
EDYCJA: Nie zawsze mam dostęp do std :: thread, biblioteka wątków może być doładowania :: wątku lub nawet innych wątków zależnych od platformy. I w konsekwencji nie ma dostępu do std :: async.
Moim głównym problemem jest posiadanie pojęcia posiadania w std :: bind.
Czy próbowałeś użyć 'std :: shared_ptr'? Wygląda na to, że kompiluje się bez problemów: http://liveworkspace.org/code/1e83d9698703711b7ed2ce0d44cf86f2 – PiotrNycz
Musisz wiedzieć, że 'std :: bind' przechowuje powiązane argumenty według wartości (tj. Jako przekazane), dlatego jeśli przekazujesz posiadanie wskaźnik według wartości jako jeden z parametrów, wskaźnik ten zostaje "skopiowany" do wynikowego funktora, a więc posiadanie własności nawet po tym, jak pierwotny "shared_ptr" wykracza poza zakres. – haelix