喜歡這篇文章嗎?喜歡的話去看博主的置頂博客,即可依據分類找到此文章的原版得到更好的體驗,
圖片及代碼顯示的問題,筆者深感抱歉,想要更好的體驗去原博文即可。
title: c++重學筆記9 - operator=()的陷阱
mathjax: true
date: 2020-03-13 19:35:01
categories: [c++重學筆記]
tags: [c++重學筆記]
keywords: [c++重學筆記]
operator=
定義賦值函數難嗎?難,真的特別難,如果你能看出下面的代碼中賦值函數的問題,那你就懂爲什麼難了。
#include <iostream>
using namespace std;
class my_class {
int *p;
public:
my_class &operator=(const my_class &rhs) {
delete p;
p = new int(*rhs.p);
return*this;
}
};
int main() {}
這裏的問題其實很明顯,這個賦值不支持自我賦值。解決方案可以說在最前面特判掉自我賦值,或者是先拷貝最後再delete,又或者是用拷貝構造函數拷貝一份,然後swap來實現。