最近为了学习QT,重新学习C++,拿起了厚厚的《C++ Primer Plus(第6版)》
第12章:类与动态内存分配
Stringbad.h
#pragma once #include <iostream> class Stringbad { private: char* str; int len; static int num_strings; public: Stringbad(const char* s); Stringbad(); ~Stringbad(); friend std::ostream& operator<<(std::ostream& os, const Stringbad& st); //Stringbad& operator=(const Stringbad& st); //Stringbad(const Stringbad& st); };
strngbad.cpp
#include "strngbad.h" #include <cstring> 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++; cout << num_strings << ":\"" << str << "\" object created\n"; } Stringbad::Stringbad() { len = 4; str = new char[4]; std::strcpy(str, "C++"); num_strings++; cout << num_strings << ":\"" << str << "\" default object created\n"; } Stringbad::~Stringbad() { cout << "\"" << str << "\" object deleted,"; --num_strings; cout << num_strings << " left\n"; delete[] str; } std::ostream& operator<<(std::ostream& os, const Stringbad& st) { os << st.str; return os; } /* Stringbad& Stringbad::operator=(const Stringbad& st) { cout << "object assign " << st.str << std::endl; if (this == &st) return *this; delete[] str; len = st.len; str = new char(len + 1); std::strcpy(str, st.str); return *this; } Stringbad::Stringbad(const Stringbad& st) { len = st.len; str = new char[len + 1]; std::strcpy(str, st.str); num_strings++; cout << num_strings << ":\"" << str << "\" object copy.\n"; } */