处理私有默认构造函数

Dealing with private default constructor

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

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

我想实现一个 class 其中包括 class X.

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

我实现这个 class 的目的是我必须将这个三元组值插入到列表中。

但我无法实现此 class,因为 X 的默认构造函数被声明为私有,而且我不喜欢干涉 X 的代码作为休息的库函数依赖于它。

我可以利用 class X 有一个赋值运算符这一事实来实现我想要的吗?谢谢。

编辑 1:没有其他可用的构造函数 class。

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

你的问题是你在写:

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

您需要的是直接复制构造 x,y,z(查找 "initializer list"。因此:

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)
{
}

(当然还要更改声明)