Конструктор shared_ptr<T>
принимает указатель типа T*
в качестве своего аргумента, предположительно указывает на динамически выделенный ресурс (или, по крайней мере, то, что может быть освобождено от делетера). С другой стороны, make_shared
делает конструкцию для вас и принимает аргументы конструктора напрямую.
Итак, либо вы говорите это:
std::shared_ptr<Foo> p(new Foo('a', true, Blue));
Или, намного лучше и эффективнее :
auto p = std::make_shared<Foo>('a', true, Blue);
Последняя форма заботится о выделении и построении для вас, и в этом процессе создается более эффективная реализация.
Конечно, вы могли бы также сказать make_shared<Foo>(Foo('a', true, Blue))
, но это просто создаст ненужную копию (которая может быть отменена), и, что более важно, она создает ненужную избыточность. [ Изменить ] Для инициализации вашего вектора это может быть лучшим методом:
auto p = std::make_shared<Func>(std::vector<std::string>({"a", "b", "c"}));
Важным моментом является то, что make_shared
выполняет динамическое распределение для вас, в то время как конструктор shared-ptr делает не , а вместо этого переходит в собственность .
На момент написания статьи (январь 2019 г.) анимация stroke-dashoffset
не поддерживалась в Microsoft Edge, и учитывая послужной список Microsoft и быстрые улучшения Edge, можно ожидать, что она не будет работать в ближайшее время.
Пожалуйста, обратитесь к https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/6493460/
К сожалению, моя рекомендация правильно отображать анимацию в браузерах, отличных от IE / Edge, и показывать конечный результат только в IE / Edge (чтобы они по-прежнему видели что-то на странице). Чтобы определить текущий браузер пользователя, обратитесь к Как определить браузер Safari, Chrome, IE, Firefox и Opera? .