Re[10]: make_heap или ?
От: 13akaEagle Россия  
Дата: 28.12.06 13:26
Оценка:
Здравствуйте, a-lex, Вы писали:

AL>

Вариант 2.

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>

Вариант 3.

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>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.