我有以下代碼:爲什麼使用字符串的複製構造函數?
class TestClass
{
public:
TestClass(){};
std::string GetTestString()
{
return (mTestString);
}
void SetTestString(const std::string& rTestString)
{
mTestString = rTestString;
}
private:
std::string mTestString;
};
TestClass* pGlobalVar;
void SomeFunction(TestClass MyClass)
{
pGlobalVar->SetTestString("cba");
std::cout << "Changed string: " << pGlobalVar->GetTestString() << std::endl;
std::cout << "Copied string: " << MyClass.GetTestString() << std::endl;
}
int main()
{
pGlobalVar = new TestClass();
pGlobalVar->SetTestString("abc");
std::cout << "Original string: " << pGlobalVar->GetTestString() << std::endl;
SomeFunction(*pGlobalVar);
delete (pGlobalVar);
}
此輸出以下:
Original string: abc Changed string: cba Copied string: abc
,因爲我沒有定義我的類定義拷貝構造函數,我希望一個單位的副本將作出,包括std::string
中的指針。顯然,雖然使用std::string
拷貝構造函數,但由於對原始字符串的更改不會更改副本。
任何人都可以向我解釋爲什麼它沒有製作平面複製?
我在Linux上使用GCC 4.4.6。
'std :: string'被設計成(至少就複製而言)它的行爲類似於int。如果成員'mTestString'的類型爲'int',那麼'pGlobalVar-> mTestString'不會被修改爲調用'SomeFunction'。按照設計,'std :: string'也是如此。這是C++非常理想的特性。 – 2012-07-25 08:47:39