Здравствуйте, a-lex, Вы писали:
AL>
AL>Если хотим, чтобы объекты Game не хранили копии Team'ов, а ссылались на уже существующие команды.
AL>AL>struct Game
AL>{
AL> Team* _first; // указатель вместо ссылки
AL> Team* _second; // указатель вместо ссылки
AL> Score score;
AL>// TDateTime _datetime;
AL> std::string _datetime;
AL> Game(Team& first, Team& second, std::string datetime);
AL>//убираем -- сойдет и созданный компилятором Game& operator=(const Game& game);
AL>
friend bool operator>(
const Game& left,
const Game& rigth);
AL>};
AL>
С share_ptr и сделал.
AL>Обратите внимание, что при копировании/присваивании объектов Game копируются указатели на объекты Team. Для облегчения управления их временем жизни вместо голых указателей лучше использовать умные (например, boost::shared_ptr<Team>).
AL>
AL>AL>struct Game : boost::noncopyable // ну или руками делаем копи-ктор и оператор= приватными
AL>{
AL> Team& _first;
AL> Team& _second;
AL> Score score;
AL>// TDateTime _datetime;
AL> std::string _datetime;
AL> Game(Team& first, Team& second, std::string datetime);
AL>//убираем Game& operator=(const Game& game);
AL>
friend bool operator>(
const Game& left,
const Game& rigth);
AL>};
AL>
AL>Тут объекты Game получаются некопируемыми. Тогда в контейнере надо хранить (умные) указатели на Game (например, boost::shared_ptr). Алгоритмам типа make_heap придется передавать свой функтор для сравнения указуемых объектов.
Об это варианте я даже не знал.
PS: Спасибо всем ответевшим.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>