喜歡這篇文章嗎?喜歡的話去看博主的置頂博客,即可依據分類找到此文章的原版得到更好的體驗,
圖片及代碼顯示的問題,筆者深感抱歉,想要更好的體驗去原博文即可。
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);
}