C++会给类型生成一些默认函数:默认构造函数、复制构造函数、赋值函数等等。如果你不想要这些函数,比如你的类型没有复制/赋值语义(比方说类成员有指针),你就会想把复制构造函数和赋值函数删掉
Blah(const Blah&) = delete;
Blah& operator=(const Blah&) = delete;
这样如果你不慎对着这个类进行了复制或者赋值操作,编译就会报错。
被删掉的函数是没有定义的,所以即使在多个编译单元出现,也不会被编译到各个单元的目标文件里,在链接时不会出现重定义问题。
网友评论