如何在转换函数中避免复制构造函数?

unj*_*nj2 1 c++ visual-c++

我试图在两个类之间转换,并避免临时对象.

这是我的声明Square:

class CSquare
{
public:
    int dimension;
    CSquare(int dimension);

    // Conversion to Rectangle
    operator CRectangle();

    ~CSquare(void);
};
Run Code Online (Sandbox Code Playgroud)

这是我的声明Rectangle:

class CRectangle
{
public:
    int length;
    int width;

    CRectangle(int length, int width);

    //Copy Constructor
    CRectangle(const CRectangle& anotherRectangle); 

    ~CRectangle(void);
};
Run Code Online (Sandbox Code Playgroud)

为什么

CSquare aSquare = CSquare(10);
    CRectangle convertedRect = (CRectangle) aSquare;
Run Code Online (Sandbox Code Playgroud)

调用复制构造函数?

我有转换功能:

CSquare::operator CRectangle(){
    return CRectangle(CSquare::dimension,CSquare::dimension);
}
Run Code Online (Sandbox Code Playgroud)

但我仍然得到一个临时对象.

我该如何避开临时对象?

Ben*_*ley 5

您可以通过在CRectangle中编写转换构造函数来避免复制构造:

CRectangle::CRectangle(const CSquare & sq)
    :length(sq.dimension),
     width(sq.dimension)
{}
...
...
CSquare aSquare(10);
CRectangle convertedRect(aSquare);
Run Code Online (Sandbox Code Playgroud)

  • 另一种更好的方法是不要不同地定义矩形和方形.Squareness是一个在矩形上运算的谓词.如果矩形的所有边都相等,那么它就是方形. (4认同)