//Implement a own version of string. #include <iostream>#include <string.h>using namespace STD;classstring{ Public: String (Const Char*s ="") {str =New Char[strlen(s) +1]; Copy (str,s); } ~string () {if(str = NULL) {Delete[]str; str = NULL; }} String (ConstString &s) {str =New Char[strlen(S.STR) +1]; Copy (STR,S.STR); } string&operator=(ConstString &s) {string sp (S.STR);if( This! = &s) {Char*temp = str; str = SP.STR; Sp.str = temp; }return* This; }voidPrintf () {cout<< str << Endl; }friendistream&operator>> (IStream &is,String& s) {Char*str =New Char[ -]; is >> str; String temp (str); s = temp;returnis; }friendostream&operator<< (Ostream &out, string& s) {out << s.str;returnOut }Private:voidCopyChar*dist,Const Char*SRC) {strcpy(DIST,SRC); }Private:Char*str;};intMain () {String s;Cin>> s;cout<< s<<endl;return 0;}#include <iostream>using namespace STD;//Implement a simple smart pointer. Template<TypeNameType>classmy_auto{ Public: My_auto (Type *p):p TR (p) {count =New int[1]; count[0] =1; } My_auto (Constmy_auto<type>& ma) {ptr = ma.ptr; Count = Ma.count; count[0]++; } my_auto&operator=(ConstMy_auto &ma) {if( This! = &ma) { This->~my_auto (); ptr = ma.ptr; Count = Ma.count; count[0]++; }return* This; } ~my_auto () {if(count[0]-- ==1) {cout<<"Free"<< Endl;Deleteptr ptr = NULL;Delete[]count; Count = NULL; }} type&operator*() {return*ptr; } type*operator() {returnptr }Private: Type *ptr;int*count;};intMain () {my_auto<int> Sp (New int(3)); my_auto<int> SB (SP); my_auto<int> SA (New int( -)); SA = SB;//cout << *sp << Endl; return 0;}
Copyright NOTICE: This article for Bo Master original article, without Bo Master permission not reproduced.
The two classic C + + pen questions