《剑指offer》01 赋值运算符函数




sizeof(一个空类)为什么不是0?
答:空类型的实例不包含任何信息,本应该是0,但是当我们声明该类型的实例的时候,它必须在内存中占有一定的空间,否则无法使用这些实例。
调用构造函数和析构函数秩序要知道函数的地址,这些函数的地址只与类型相关,而与类型的实例无关。
如果把析构函数标记为虚函数呢?
答:会生成虚函数表,并在该类型的每个实例中添加一个指向该虚函数表的指针。32位,4字节 64位,8字节。
class A
{
private:
           int value;
public:
          A( int n )
          {
                   value = n;
          }
           //A(A other)   //error  C++标准不允许复制构造函数传递参数
          A( const A & other)
          {
                   value = other.value;
          }
           void Print()
          {
                   cout << value << endl;
          }
};
int main()
{
           A a = 10;
           A b = a;
          b.Print();
          system( "pause");
           return 0;
}



面试题1:赋值运算符函数
初级程序员:
<pre name="code" class="cpp">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 ;
}


 
 

高级程序员:要考虑异常安全性的解法。(赋值运算符的现代写法)
CMyString&  CMyString ::operator=(const CMyString &str )
{
           if (this != &str)
          {
                    CMyString strTemp(str );
                    char* pTemp = strTemp.m_pData;
                   strTemp.m_pData = m_pData;
                   m_pData = pTemp;
          }
          
           return *this ;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值