处理私有默认构造函数

时间:2018-06-15 10:42:22

标签: c++ class assignment-operator default-constructor

我正在使用一个具有class X的库,其默认构造函数被声明为private。

请注意class X支持赋值运算符。

我想实现一个包含类X的类。

class MyClass
{
    X x;
    Y y;
    Z z;
public:
    MyClass(X xv, Y yv, Z zv);
};

我实现这个课程的目的是我将这个三元组值插入一个列表。

但我无法实现此类,因为X的默认构造函数被声明为私有,我也不希望干扰X的代码作为其余部分。库函数依赖于它。

我可以使用class X具有赋值运算符的事实来实现我想要的吗?感谢。

编辑1:该类没有其他构造函数。

1 个答案:

答案 0 :(得分:1)

几乎可以肯定有一个复制构造函数。 (这将是一个非常奇怪的类,它有一个赋值运算符,但不是一个复制构造函数。)如果类作者没有声明一个复制构造函数,编译器将为它们创建一个。

你的问题是你在写:

MyClass::MyClass(X xv, Y yv, Z zv)
    // x, y, z default constructed here.
{
    x = xv; y = yv; z = zv;
}

你需要的是直接复制构造x,y,z(查找“初始化列表”。所以:

MyClass::MyClass(X xv, Y yv, Z zv)
: x(xv), y(yv), z(zv)
{
}

话虽如此,你通过值传递xv等。把它写成:更加自然:

MyClass::MyClass(const X& xv, const Y& yv, const Z& zv)
: x(xv), y(yv), z(zv)
{
}

(当然也改变声明)