没有实现的构造函数定义?

时间:2013-12-17 11:55:01

标签: c++ c++11

我正在使用一个非我自己编写的库。 某些类的头文件中的构造函数声明为

class SomeClass {
public:
    SomeClass(const SomeClass& orig);

    // more declarations

}

但是.cpp文件中没有实现。为什么代码编译呢?

3 个答案:

答案 0 :(得分:6)

如果从未使用该函数,代码将编译并链接。

如果有一种老式的禁止对象深层副本的方式,那么你所拥有的是一个相当普遍的东西:如果编译器尝试取一个,那么链接器就会失败。

现在,您可以使用C ++ 11构造函数delete惯用语:

SomeClass(const SomeClass& orig) = delete;

答案 1 :(得分:5)

这是禁用类的复制构造函数的一种方法。通常,声明也是private(然后你至少得到一个很好的访问修饰符错误,而不是链接器错误。)

C ++ 11的方法如下:

SomeClass(const SomeClass& orig) = delete;

答案 2 :(得分:0)

如果您从未在代码中调用构造函数,或者使用此类/结构,则无需实现。