【发布时间】:2013-03-31 10:00:07
【问题描述】:
这里的代码基本上实现了一个名为CMyString的类的=赋值,代码是正确的。
CMyString& CMyString::operator =(const CMyString &str) {
if(this == &str)
return *this;
delete []m_pData;
m_pData = NULL;
m_pData = new char[strlen(str.m_pData) + 1];
strcpy(m_pData, str.m_pData);
return *this;
}
实例是通过引用传递的,第一个'if'是检查传入的实例是否是它自己。我的问题是:为什么它使用&str 来比较,str 不是已经包含实例的地址吗?谁能解释一下这条线是如何工作的?
另外,我只是想确保this 包含对象的地址:这是正确的吗?
【问题讨论】:
-
一个建议,为了让赋值操作执行安全,最好将m_pData存储在一个临时指针中,在最后删除临时指针,这样在为m_pData分配内存时甚至会发生异常 = new char[strlen(str .m_pData) + 1];源对象数据是安全的 CMyString& CMyString::operator =(const CMyString &str) { if(this == &str) return *this;字符 *temp = m_pData; m_pData = 新字符[strlen(str.m_pData) + 1]; strcpy(m_pData, str.m_pData);删除 [] 温度;临时=空;返回*这个; }
-
我知道,我正在考虑放一些类似功能但没有异常处理的东西,但这并不是我真正关心的......但无论如何谢谢
标签: c++ pointers reference variable-assignment