string類的構造,拷貝,賦值,析構函式的實現

2021-10-06 06:00:32 字數 1102 閱讀 8334

實現分為傳統版和現代版,主要區別在於現代版在拷貝建構函式和賦值運算子過載中使用了swap交換函式,**簡單了很多,但也出現了幾個需要注意的問題。

#pragma once

#include

using

namespace std;

class

string

;

#include

"string.h"

#include

//傳統版:

string::

string

(const

char

* str)

//預設引數 str="" ,宣告處給

_str =

newchar

[strlen

(str)+1

];strcpy

(_str, str);}

string::

string

(const string& str)

:_str

(nullptr

)string& string::

operator=(

const string& str)

return

*this;}

string::

~string()

}//現代版:

string::

string

(const

char

* str)

//預設引數 str="" ,宣告處給

string::

string

(const string& str)

:_str

(nullptr

)//必須初始化為空,防止swap之後,臨時變數發生非法訪問

string& string::

operator

=(string str)

//現代版使用了swap,交換會使str._str置空,所以傳值,用拷貝構造建立乙個臨時的物件

string::

~string()

}

越努力,越幸福!

類的構造 析構 拷貝 賦值函式

讀 高質量程式設計指南 chapter 14總結 一般情況下,對於任意乙個類a,如果不顯示的宣告和定義,會自動生成預設的4個public inline函式 class a 1,初始化和賦值的區別 初始化是在建立物件時使用初始值直接填充物件的記憶體單元,因此不會有資料型別轉換,也不會產生臨時物件。而賦...

類的構造 拷貝 賦值 析構函式

賦值運算子 析構函式 總結構造 拷貝 賦值 析構函式是類的四個特殊成員函式,其特殊之處在於,即使我們沒有定義這些函式,編譯器也會自動提供預設函式,但如果我們提供了這些函式的顯式定義,那麼編譯器將不會再提供。這可能導致一些隱藏的問題,因此,我們需要對他們的實現進行充分的認識。假定有乙個類klunk,那...

類string的建構函式 拷貝建構函式和析構函式

原文 引用 在這個帖子的基礎上稍微新增修改了點內容。string 類的原型如下 class string string string string string const char str else 當初始化串存在的時候,為m data申請同樣大小的空間存放該串 string string con...