皆さん、こんにちは!
「円」へのポインターを受け取り (たとえば)、いくつかの「連鎖」メソッドを介してその属性を調整するクラスがあります。このようなもの:
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) )
{ ... }
一方で、「if」式の中で作成された一時的なオブジェクトは、この式の最後まで存続すると思います。したがって、「Radius」と「Center」の呼び出しは有効です。しかし一方で、一時変数への参照を使用することは未定義の動作であり、私はまさにこの種のことを行っているように思えます-「this」が一時的な場合、(*this) を使用しています。それは私にいくつかの疑問を抱かせるので、はっきりさせてください。ありがとう!