class Sample {
private:
int data = 0;
std::string name = nullptr;
public:
Sample(int m_data, const std::string& pName) : data(m_data), name(pName) {
std::cout << "Sample(int, const std::string&): " << name << "\n";
}
Sample(const Sample& rhs) : data(rhs.data), name(rhs.name) {
std::cout << "Sample(const Sample&): " << name << "\n";
}
~Sample() {
std::cout << "~Sample(): " << name << "\n";
}
}
Sample TestFunc(int param) {
Sample a(param, "a");
return a;
}
我制作了一个这样的类,并在main()中调用了TestFunc(20);
。然后出现以下输出。
Sample(int, const std::string&): a
~Sample(): a
我期望会创建一个临时Sample
对象,因此应调用复制构造函数,但不是。
此代码已使用GCC和Clang进行编译,并已通过MSVC进行了复制构造,这正是我所期望的。
Sample(int, const std::string&): a
Sample(const Sample&): a // temporary object constructor
~Sample(): a
~Sample(): a // temporary object destructor
GCC / Clang有什么问题?