为什么 gcc 需要复制构造函数才能进行隐式转换构造函数调用?
class X
{
public:
X(int q) {}
~X()
{
std::cout << "~X()" << std::endl;
}
X(const X&) = delete;
};
X x = 1; // gives error: use of deleted function ‘X::X(const X&)’
这里更有趣的是,即使我编写了复制构造函数,它也不会被调用。析构函数只被调用一次,所以下面的代码
class X
{
public:
X(int q) {}
~X()
{
std::cout << "~X()" << std::endl;
}
X(const X&)
{
std::cout << "copy ctor" << std::endl;
}
};
int main()
{
X x = 1;
}
印刷~X()
是虫子吗?有什么解决方法吗?
我本地 PC 上的 gcc 版本是 4.6.3,这也适用于另一个 gcc 版本(在线)