Scott Meyers 在他的《Effective C++》一书中说,
要禁止编译器自动提供的功能,请将相应的成员函数声明为私有并且不提供任何实现。然后,如果有人无意中调用了一个,他们将在链接时收到错误。
我试图编写一个示例程序来实现 Scott 试图解释的内容。即使声明了成员函数public
并且没有给出实现,我也可以实现相同的目标。当我尝试从另一个对象初始化一个对象时,也发生了链接错误。所以我不明白为什么 Scott 强调需要声明成员函数private
?
我的示例程序写在下面:
#include <iostream>
using namespace std;
class Unique
{
private:
int num;
public:
Unique(int x)
{
num = x;
}
Unique(const Unique &obj);
Unique& operator =(const Unique &obj);
void disp(void)
{
cout << "num = " << num << "\n";
}
};
int main()
{
Unique ob1(3);
Unique ob2(ob1);
ob1.disp();
ob2.disp();
return 0;
}
我收到以下链接错误:
/tmp/ccXfqSqE.o(.text+0x135): 在函数
main': : undefined reference to
Unique::Unique(Unique const&)' collect2: ld 返回 1 退出状态