我正在使用一个非我自己编写的库。 某些类的头文件中的构造函数声明为
class SomeClass {
public:
SomeClass(const SomeClass& orig);
// more declarations
}
但是.cpp文件中没有实现。为什么代码编译呢?
答案 0 :(得分:6)
如果从未使用该函数,代码将编译并链接。
如果有一种老式的禁止对象深层副本的方式,那么你所拥有的是一个相当普遍的东西:如果编译器尝试取一个,那么链接器就会失败。
现在,您可以使用C ++ 11构造函数delete
惯用语:
SomeClass(const SomeClass& orig) = delete;
答案 1 :(得分:5)
这是禁用类的复制构造函数的一种方法。通常,声明也是private
(然后你至少得到一个很好的访问修饰符错误,而不是链接器错误。)
C ++ 11的方法如下:
SomeClass(const SomeClass& orig) = delete;
答案 2 :(得分:0)
如果您从未在代码中调用构造函数,或者使用此类/结构,则无需实现。