получение нормального ptr от shared_ptr?

Буферы - это просто массив байтов (здесь они печатаются в шестнадцатеричном формате от 00 до ff или от 0 до 255.

Вы можете представить любой файл в виде байтового массива, фактически fs.writeFile может напрямую принимать буфер. [ 112]

Вы можете преобразовать его в строку.

Проверьте это в официальной документации https://nodejs.org/api/buffer.html

47
задан fduff 13 April 2015 в 11:31
поделиться

2 ответа

Используйте get() метод:

boost::shared_ptr<foo> foo_ptr(new foo());
foo *raw_foo = foo_ptr.get();
c_library_function(raw_foo);

Удостоверяются, что Ваш shared_ptr не выходит из объема, прежде чем библиотечная функция будет сделана с ним - иначе, вредность могла закончиться, так как библиотека может попытаться сделать что-то с указателем после того, как он был удален. Будьте особенно осторожны, если библиотечная функция поддерживает копию необработанного указателя после того, как это возвращается.

133
ответ дан Adam Rosenfield 26 November 2019 в 19:12
поделиться

Другой способ сделать это состоял бы в том, чтобы использовать комбинацию & и * операторы:

boost::shared_ptr<foo> foo_ptr(new foo());
c_library_function( &*foo_ptr);

, В то время как лично я предпочел бы использовать get() метод (это - действительно правильный ответ), одно преимущество, которое это имеет, состоит в том, что это может использоваться с другими классами, которые перегрузка operator* (указатель разыменовывают), но не обеспечивает get() метод. Могло бы быть полезным в универсальном шаблоне класса, например.

30
ответ дан Michael Burr 26 November 2019 в 19:12
поделиться
Другие вопросы по тегам:

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