C++ 成员函数 赋值运算符(operator=)demo
2021/7/1 17:51:12
本文主要是介绍C++ 成员函数 赋值运算符(operator=)demo,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
C++,如果类中存在指针形式的成员变量, 默认赋值运算符在析构的过程中,可能会出现删除已经删除的数据(行为),导致程序异常终止。
解决方式:重载赋值运算符,进行深度复制,demo如下:
strng.h
#include<iostream> #ifndef STRNG_H #define STRNG_H class StringBad { public: StringBad(const char *s); StringBad(); ~StringBad(); StringBad &operator=(const StringBad &st); private: char *str; int len; static int num_strings; }; #endif //STRNG_H
Strng.cpp
#include <cstring> #include "strngbad.h" using std::cout; int StringBad::num_strings = 0; StringBad::StringBad(const char *s) { len = std::strlen(s); str = new char[len + 1]; std::strcpy(str, s); num_strings++; std::cout << num_strings << ":\"" << str << "\" object created\n"; } StringBad::StringBad() { len = 4; str = new char[4]; std::strcpy(str, "C++"); num_string++; std::cout << num_strings << ": \"" << str << "\" default object created\n"; } StringBad::~StringBad() { std::cout << "\"" << str << "\" object deleted,"; --num_strings; std::cout << num_string << "left\n"; delete[] str; } StringBad &StringBad::operator=(const StringBad &st) { if(this == &st){ return *this; } delete[] str; len = st.len; str = new char[len + 1]; std::strcpy(str, st.str); return *this; }
main.cpp
#include <iostream> #include "strng.h" using namespace std; int main() { StringBad src("abcde"); StringBad dest; dest = src; return 0; }
这篇关于C++ 成员函数 赋值运算符(operator=)demo的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26MATLAB 中 A(7)=[];什么意思?-icode9专业技术文章分享
- 2024-11-26UniApp 中如何实现使用输入法时保持页面列表不动的效果?-icode9专业技术文章分享
- 2024-11-26在 UniApp 中怎么实现输入法弹出时禁止页面向上滚动?-icode9专业技术文章分享
- 2024-11-26WebSocket是什么,怎么使用?-icode9专业技术文章分享
- 2024-11-26页面有多个ref 要动态传入怎么实现?-icode9专业技术文章分享
- 2024-11-26在 UniApp 中实现一个底部输入框的常见方法有哪些?-icode9专业技术文章分享
- 2024-11-26RocketMQ入门指南:搭建与使用全流程详解
- 2024-11-26RocketMQ入门教程:轻松搭建与使用指南
- 2024-11-26手写RocketMQ:从入门到实践的简单教程
- 2024-11-25【机器学习(二)】分类和回归任务-决策树(Decision Tree,DT)算法-Sentosa_DSML社区版