I construct a class named CMyString, here is it:
class CMyString {
public:
CMyString();
CMyString(char* pData);
CMyString(const CMyString& str);
~CMyString(void);
char* getData();
void setData(char* pData);
CMyString& operator=(const CMyString& str);
private:
char* m_pData;
};
CMyString::CMyString() {
m_pData = new char;
}
CMyString::CMyString(char* pData) {
// m_pData = new char;
m_pData = pData;
}
CMyString::CMyString(const CMyString& str) {
// 为指针分配内存
// m_pData = new char;
// 拷贝值
m_pData = str.m_pData;
}
CMyString::~CMyString(void) {
// delete m_pData;
}
CMyString& CMyString::operator=(const CMyString& str) {
if (this == &str)
return *this;
delete m_pData;
m_pData = nullptr;
m_pData = new char[strlen(str.m_pData) + 1];
strcpy(m_pData, str.m_pData);
return *this;
}
char* CMyString::getData() {
return m_pData;
}
void CMyString::setData(char *pData) {
m_pData = pData;
}
And here is my main.cpp:
#include <iostream>
#include "CMyString.h"
using std::cout;
using std::endl;
int main() {
char* pData = "What are you worrying about?";
std::cout << pData << std::endl;
cout << strlen(pData) << endl;
char* test = new char[30];
cout << sizeof(test) << endl;
char* test2 = new char;
test2 = "23";
cout << test2 << endl;
strcpy(test, pData);
cout << endl << test << endl << endl;
CMyString str(pData);
std::cout << str.getData() << std::endl;
CMyString str2, str3;
str3 = str2 = str;
std::cout << str3.getData() << endl;
char* pData2 = "Data has been changed.";
str3.setData(pData2);
cout << str.getData() << endl;
cout << str2.getData() << endl;
cout << str3.getData() << endl;
return 0;
}
then I'm confused by the
char* pData = new char;
char* pData2 = new char[30];
Am I right in the class implementation? How can I tell the two different pointers? Do I write the constructor and de-constructor function and the operator= correctly? if not, how to write them?