喜欢这篇文章吗?喜欢的话去看博主的置顶博客,即可依据分类找到此文章的原版得到更好的体验,
图片及代码显示的问题,笔者深感抱歉,想要更好的体验去原博文即可。
title: c++重学笔记7 - 不希望我的类被调用复制构造函数或者赋值函数
mathjax: true
date: 2020-03-13 18:40:33
categories: [c++重学笔记]
tags: [c++重学笔记]
keywords: [c++重学笔记]
不让你拷贝
在应用中我们可能会碰到不允许使用拷贝这样的操作,我们实现这个约束有两种方案。第一是声明这个函数,然后不实现他。这样的话能够实现这功能,但是报错的时候编译器不会报错
#include <iostream>
using namespace std;
class my_class {
public:
my_class() {}
my_class(const my_class& rhs);
};
int main() {
my_class m;
my_class m2(m);
}
然后链接器重锤出击。
Undefined symbols for architecture x86_64:
"my_class::my_class(my_class const&)", referenced from:
_main in cc9GRPax.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
我也觉得这样有点坑爹。
正确的做法应该是将这些不希望被使用的函数显示定义为私有函数。这样的话在编译期就会被发现,然后报错。
#include <iostream>
using namespace std;
class my_class {
my_class(const my_class& rhs) {}
public:
my_class() {}
};
int main() {
my_class m;
my_class m2(m);
}