假设我有一个类使用另一个类作为功能。
class city{
void travel(){
// if rail road travel by rail
// if no rail road travel by foot
}
private:
RailRoad rails;
};
当我实例化城市
时 案例1:我可以拥有铁路的城市。 案例2:我也可以没有铁路的城市。我认为是使用RailRoad * rails
并使用nullptr
作为标志来确定案例。我试图避免这种情况,因为为此我必须做新的并删除。
有没有优雅的方法来实现这个目标?
答案 0 :(得分:2)
boost::optional<RailRoad>
(或std::optional<RailRoad>
,因为C ++ 17)将为您提供相同的语义,而无需动态分配。
答案 1 :(得分:2)
如果默认构造的RailRoad
不是太贵,您可以使用:
std::pair<bool, RailRoad> optionalRailroad;
作为成员变量,理解为
optionalRailroad.first == false
表示创建的对象没有RailRoad
和
optionalRailroad.first == true
表示该对象是使用RailRoad