После большого количества расследований с valgrind я сделал заключение что станд.:: вектор делает копию объекта, который Вы хотите к push_back.
Это действительно верно? Вектор не может сохранить ссылку или указатель объекта без копии?!
Спасибо
Да, std :: vector
создает копию аргумента и сохраняет ее в векторе. Если вы хотите сохранить указатели на объекты в вашем векторе, создайте std :: vector <любой *>
вместо std :: vector
.
Однако вам необходимо убедиться, что объекты, на которые ссылаются указатели, остаются действительными, пока вектор содержит ссылку на них (интеллектуальные указатели, использующие идиому RAII, решают проблему).
std :: vector всегда копирует все, что хранится в векторе.
Если вы сохраняете вектор указателей, то он будет копировать указатель, но не экземпляр, на который указывает указатель. Если вы имеете дело с большими объектами, вы всегда можете (и, вероятно, должны) использовать вектор указателей. Часто использование вектора интеллектуальных указателей подходящего типа хорошо для целей безопасности, поскольку в противном случае обработка времени жизни объекта и управление памятью могут быть сложными.
std :: vector не только создает копию того, что вы отправляете обратно, но в определении коллекции указано, что он будет это делать, и что вы не можете использовать объекты без правильной семантики копирования в векторе. Так, например, вы не используете auto_ptr в векторе.
, если вы не хотите копий; тогда лучший способ - использовать вектор-указатель (или другую структуру, которая служит той же цели). , если вам нужны копии; используйте непосредственно push_back (). у вас нет другого выбора.
В приложении блога Пост является сущностью, а тэг - объектом значения. У тэг нет удостоверения личности. Необходимо иметь:
Проводка получила список тэгов.
Вопросы:
1: Я также прочитал, что не рекомендуется, чтобы доменная сущность общалась с доменной службой. Это правда?
Да, это не хорошая практика. Вы сущность не хотите связываться с доменной службой. Если вы сделаете это, вы не сможете использовать их позже. Вам пришлось рассмотреть возможность запуска события домена. Вы можете сказать своей области обслуживания сделать что-то fire доменных событий.
2.: Можно ли получить ссылку на доменную службу PostServices с помощью метода создания фабрики. например, IPostService PostService = ServiceUtil.GetPostService (); return PostService.GetTags (Post.content);
Да, это возможно. Заводской метод может возвращать абстрактный класс или интерфейс. Это хороший принцип разработки программного обеспечения «код для интерфейса, а не для реализации». Если вы это сделаете, вы сможете изменить свою реализацию позже, и вам не придется менять код вашего клиента.
3: Допустимо ли подключение доменной службы к API третьей стороны?
Я не рекомендую вам это, но это допустимо.
Извините, я не понимаю вопрос 4.
Посмотрите эту ссылку. Надеюсь, это поможет тебе.
-121--4055796-В случае производительности ленивые квантификаторы не всегда быстрее из-за обратного отслеживания: http://blog.stevenlevithan.com/archives/greedy-lazy-performance
Что касается фактического дизайна, я честно не могу сказать, почему квантификаторы жадны по умолчанию, но мне интересно, какой контрольный символ был бы использован для создания кванта Не думаю, что ?
порезал бы его: -)
Да, std:: vector
хранит копии. Как вектор
должен знать ожидаемое время жизни объектов?
Если вы хотите передать или разделить владение объектами, используйте указатели, такие как shared _ ptr
(см. Boost или TR1 ), чтобы упростить управление ресурсами.