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

mar*_*ipf 1 c++ c++11

我正在使用一个非我自己编写的库.有些类在其头文件中声明了类似的构造函数

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

    // more declarations

}
Run Code Online (Sandbox Code Playgroud)

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

Bat*_*eba 6

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

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

这些天,你可以使用C++ 11构造函数delete习语:

SomeClass(const SomeClass& orig) = delete;
Run Code Online (Sandbox Code Playgroud)

  • 虽然通常构造函数是私有的,但不是公开的,如此处所示. (3认同)

Jos*_*eld 5

这是禁用类的复制构造函数的一种方法.通常,声明也是private如此(您至少会获得一个很好的访问修饰符错误,而不是链接器错误).

C++ 11的方法如下:

SomeClass(const SomeClass& orig) = delete;
Run Code Online (Sandbox Code Playgroud)