智能指针的成员初始化列表,用于用户定义的结构



这是以下程序。这只是基于2分制成的矩形。我的问题是矩形构造函数。

#include <iostream>
#include <memory>

class Point { // class for representing points
public:
    Point(int x, int y);
    void setX(int newVal);
    void setY(int newVal);
};
struct RectData { // Point data for a Rectangle
    Point _ulhc; // ulhc = “ upper left-hand corner”
    Point _lrhc; // lrhc = “ lower right-hand corner”
};
class Rectangle {
public:
    Rectangle(Point ulhc, Point lrhc) :
        _pData->_ulhc(ulhc), _pData->_lrhc(lrhc)
    {}
    Point & upperLeft() const { return _pData->_ulhc; }
    Point & lowerRight() const { return _pData->_lrhc; }
private:
    std::tr1::shared_ptr<RectData> _pData;
};
int main()
{
    Point coord1(0, 0);
    Point coord2(100, 100);
    const Rectangle rec(coord1, coord2); // rec is a const rectangle from
                                        // (0, 0) to (100, 100)
    rec.upperLeft().setX(50); // now rec goes from
                            // (50, 0) to (100, 100)!
    return 0;
}

看来我不正确地进行初始化。MSVC给我错误expected a '(' or a '{'。我在这里很困惑。如何通过此构造函数正确初始化_pData结构?

您应该初始化_pData本身,而不是其成员。例如

Rectangle(Point ulhc, Point lrhc) :
    _pData(new RectData{ulhc, lrhc})
{}

相关内容

  • 没有找到相关文章

最新更新