c++重學筆記7 - 不希望我的類被調用複製構造函數或者賦值函數

喜歡這篇文章嗎?喜歡的話去看博主的置頂博客,即可依據分類找到此文章的原版得到更好的體驗,

圖片及代碼顯示的問題,筆者深感抱歉,想要更好的體驗去原博文即可。


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);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章