Хорошо, чтобы вернуть константные ссылки / указатели на std :: vectors через границы dll? - PullRequest
1 голос
/ 22 января 2020

У меня есть бизнес-логика c в отдельной dll, и чтобы иметь возможность экспортировать класс из этой dll для использования, например, GUI классами, мне сказали не передавать никакие объекты шаблона std, такие как std: : вектор через границу интерфейса dll. Тем не менее, мне разрешено передавать ссылки и указатели на объекты типа шаблона.

Когда было бы нормально передать ссылку или указатель на std :: vector (заполненный указателями, если это имеет значение) код за пределами бизнес-логики / через границу DLL (как возвращаемое значение от получателей). Пример:

const std::vector<int*>& getNumbers();
const std::vector<int*>* getNumbers();

Могу ли я всегда к этому? Каковы последствия этих двух альтернатив по сравнению с просто передачей по значению?

Или я должен вообще избегать передачи std :: vector и какие будут альтернативы в этом случае?

РЕДАКТИРОВАТЬ: я знаю, что передача объектов через границы dll проблематична c и вы должен знать, какой компилятор используется et c. Мне интересно, может ли возврат константных ссылок и указателей быть обходным путем в любом случае, поскольку мне сказали, что это так, и если это хорошая практика.

1 Ответ

1 голос
/ 22 января 2020

Любая причина, которая оправдывает «не передавать никакие объекты шаблона std, такие как std :: vector через границу интерфейса dll», будет в равной степени применяться к передаче указателей и ссылок на std :: vector.

Когда код переходит граница разыменовывает указатель, он сталкивается с той же проблемой.

Итак, нет.

...