Класс STL для считаемых на ссылку указателей?

Await.result убирает Future, а не product, поэтому ваши ожидания соответствуют реальному поведению здесь. Он говорит, что некоторые люди могут ожидать последовательного выполнения вместо параллельного, из-за того, как ведут себя другие полугруппы, но он выбрал плохой пример кода, потому что результат его примера одинаков, независимо от того, выполняется ли он параллельно или последовательно. Лучшим примером, иллюстрирующим точку зрения автора, было бы что-то вроде:

val futurePair = Semigroupal[Future].product(
  Future{Thread.sleep(750); "Hello},
  Future{Thread.sleep(750); 123}
)
Await.result(futurePair, 1.second)

Await.result истекло бы, если бы Futures выполнялся в последовательности.

12
задан René Hoffmann 17 November 2017 в 10:39
поделиться

3 ответа

За исключением уже упомянутой TR1 shared_ptr, в STL нет никакого считаемого на ссылку указателя.

Я предлагаю, чтобы Вы использовали повышение:: shared_ptr (загружающий повышение будет достаточно, нет ничего для компиляции, его реализация только для заголовка).

Можно также хотеть взглянуть на интеллектуальные указатели из библиотек Loki (снова, реализация только для заголовка).

Для обзора доступных интеллектуальных указателей посмотрите там.

14
ответ дан 2 December 2019 в 05:42
поделиться

Для COM-объектов используйте CComPtr <>.

1
ответ дан 2 December 2019 в 05:42
поделиться

Если Вы не хотите/можете Повышение использования, и Ваш компилятор реализует TR1, можно использовать shared_ptr (одолженный от Повышения):

#include <tr1/memory>

...

std::tr1::shared_ptr<Foo> ptr(new Foo);

Иначе, нет, нет никаких интеллектуальных указателей кроме std::auto_ptr в ванильном STL.

9
ответ дан 2 December 2019 в 05:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: