Действительно ли это допустимо для разработки 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 больше не ссылаются на него.
На мой взгляд, если его нет в стандарте и он не является объектом/механизмом, предоставляемым вашей библиотекой, то он не должен быть частью интерфейса к библиотеке. Вы можете создать свой объект для подсчета ссылок и, возможно, использовать boost внизу, но он не должен быть явно выставлен в интерфейсе.
.DLL обычно не владеют ресурсами - ресурсы принадлежат процессам, использующим DLL. Вероятно, лучше всего вернуть обычный указатель, который затем хранится в общем указателе на вызывающей стороне. Но без дополнительной информации трудно быть на 100% уверенным в этом.
.Нужно что-то искать, если вы выставлять необработанные указатели из интерфейса dll. Это заставляет использовать разделяемый dll CRT, память, выделенная в одном CRT, не может быть распределена в другом CRT. Если вы используете разделяемые dll CRT во всех своих модулях ( dll's & exe's ), то вы в порядке, они все разделяют одну и ту же кучу, если вы не будете пересекать CRT's, то мир расплавится.
Помимо этого вопроса, я согласен с принятым ответом. Фабрика по созданию, вероятно, не должна определять собственность и управление жизненным циклом для клиентского кода.