Всем привет!
У меня есть класс, который получает указатель на «круг» (например), а затем настраивает его атрибуты с помощью некоторых методов «цепочки». Что-то вроде этого:
class CCircleSetter
{
public:
explicit CCircleSetter( CCirclePtr circle ) : m_circle(circle)
{
}
CCircleSetter & Radius( int radius )
{
if (m_circle) m_circle->SetAttribute( "radius", radius );
return *this;
}
CCircleSetter & Center( CPoint center )
{
if (m_circle) m_circle->SetAttribute( "center", center );
return *this;
}
operator bool() const
{
return ( m_circle != NULL );
}
private:
CCirclePtr m_circle;
};
Теперь мне интересно, является ли этот код законным или нет:
if ( CCircleSetter(myCircle).Radius(10).Center(myPoint) )
{ ... }
С одной стороны, я думаю, что временный объект, созданный внутри выражения "если", будет жить до конца этого выражения. Итак, звонки в «Радиус» и «Центр» законны. Но, с другой стороны, использование ссылок на временные переменные является неопределенным поведением, и мне кажется, что я делаю именно такие вещи - использую (*this), где "это" является временным. Это вызывает у меня некоторые сомнения, поэтому, пожалуйста, уточните. Спасибо!