Это - OK для использования повышения:: совместно использованный ptr в интерфейсе DLL?

Действительно ли это допустимо для разработки DLL в C++, который возвращается, повышение совместно использовало указатели и использует их в качестве параметров?

Так, это в порядке для экспорта функций как это?

1.) boost::shared_ptr<Connection> startConnection();
2.) void sendToConnection(boost::shared_ptr<Connection> conn, byte* data, int len);

В специальном предложении: подсчет ссылок работает через границы DLL, или требование было бы то, что exe и dll используют то же время выполнения?

Намерение состоит в том, чтобы преодолеть проблемы с монопольным использованием объекта. Таким образом, объект удален, когда и dll и exe больше не ссылаются на него.

10
задан Tarnschaf 24 December 2009 в 15:08
поделиться

3 ответа

На мой взгляд, если его нет в стандарте и он не является объектом/механизмом, предоставляемым вашей библиотекой, то он не должен быть частью интерфейса к библиотеке. Вы можете создать свой объект для подсчета ссылок и, возможно, использовать boost внизу, но он не должен быть явно выставлен в интерфейсе.

.
4
ответ дан 3 December 2019 в 20:42
поделиться

DLL обычно не владеют ресурсами - ресурсы принадлежат процессам, использующим DLL. Вероятно, лучше всего вернуть обычный указатель, который затем хранится в общем указателе на вызывающей стороне. Но без дополнительной информации трудно быть на 100% уверенным в этом.

.
2
ответ дан 3 December 2019 в 20:42
поделиться

Нужно что-то искать, если вы выставлять необработанные указатели из интерфейса dll. Это заставляет использовать разделяемый dll CRT, память, выделенная в одном CRT, не может быть распределена в другом CRT. Если вы используете разделяемые dll CRT во всех своих модулях ( dll's & exe's ), то вы в порядке, они все разделяют одну и ту же кучу, если вы не будете пересекать CRT's, то мир расплавится.

Помимо этого вопроса, я согласен с принятым ответом. Фабрика по созданию, вероятно, не должна определять собственность и управление жизненным циклом для клиентского кода.

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

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