我有一个类,它在构造函数中完成所有工作(它在那里构造,运行一些计算,输出它们,然后在构造函数中销毁所有这些)。
这是简化的代码:
#include <iostream>
class myInt {
public:
myInt(int init) : mInt(init) {}
int mInt;
};
class SinglePara {
public:
SinglePara(myInt first) : member(first.mInt) { std::cout << member << std::endl; this->~SinglePara(); }
int member;
};
class TwoPara {
public:
TwoPara(myInt first, myInt second) : member1(first.mInt), member2(second.mInt) { std::cout << member1 + member2 << std::endl; this->~TwoPara(); }
int member1, member2;
};
int main()
{
myInt one(1), two(2), three(3);
TwoPara myTwo(one, two); // outputs 3 as expected
TwoPara(one, two); // outputs 3 as expected
SinglePara mySingle(three); // outputs 3 as expected
SinglePara(three); // won´t compile
std::cin.ignore();
return 0;
}
现在,我代码中的前 3 个示例的行为完全符合我的预期。但是最后一个甚至不会编译,因为它认为我想调用复制构造函数,即使three
is myInt
。WhenSinglePara
和TwoPara
take 作为参数,而不是myInt
then 所有四个示例都按照我的意愿行事。
有人可以解释这种行为并告诉我如何解决第四个例子吗?
我正在使用 MSVC 2013