C++11中default关键字

C++11添加了很多新特性,使C++看上去更加的灵活和面向对象,其中新关键字default值得我们关注一下。
我们知道有时候当我们仅创建了有参构造函数后,如果你想调用无参构造函数编译是会报错的。因为一旦你自己定义了构造函数,系统的默认构造函数是被屏蔽的,也就是说此时是没有无参构造函数的,所以我们需要自己定义一个无参构造函数。但是现在在C++11中,如果我们仅定义了有参构造函数,可以通过default关键字让默认构造函数恢复。具体实现如下:

<span style="color:#000000"><code><span style="color:#000088 !important">class</span> CString  
{  
    <span style="color:#000088 !important">char</span>* _str = <span style="color:#000088 !important">nullptr</span>;  
<span style="color:#000088 !important">public</span>:      
    CString() = <span style="color:#000088 !important">default</span>;  <span style="color:#880000 !important"><em>//恢复默认构造函数  </em></span>
    CString(<span style="color:#000088 !important">const</span> <span style="color:#000088 !important">char</span>* pstr) : _str(<span style="color:#000088 !important">nullptr</span>)  <span style="color:#880000 !important"><em>//自定义的有参构造</em></span>
    {  
        UpdateString(pstr);  
    }   
    ~CString()  
    {  
        <span style="color:#000088 !important">if</span> (_str)  
            <span style="color:#4f4f4f !important">free</span>(_str);  
    }    
    <span style="color:#000088 !important">void</span> UpdateString(<span style="color:#000088 !important">const</span> <span style="color:#000088 !important">char</span>* pstr) <span style="color:#000088 !important">throw</span>()  
    {  
        <span style="color:#000088 !important">if</span> (pstr == <span style="color:#000088 !important">nullptr</span>)  
            <span style="color:#000088 !important">return</span>;  

        <span style="color:#000088 !important">if</span> (_str)  
            <span style="color:#4f4f4f !important">free</span>(_str);  

        _str = (<span style="color:#000088 !important">char</span>*)<span style="color:#4f4f4f !important">malloc</span>(<span style="color:#4f4f4f !important">strlen</span>(pstr) + <span style="color:#006666 !important">1</span>);  
        <span style="color:#4f4f4f !important">strcpy</span>(_str,pstr);  
    }     
    <span style="color:#000088 !important">char</span>* GetStr() <span style="color:#000088 !important">const</span> <span style="color:#000088 !important">throw</span>()  
    {  
        <span style="color:#000088 !important">return</span> _str;  
    }  
};  </code></span>

版权声明:本文为jwy2014原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。