我有以下代码:为什么使用字符串的复制构造函数?
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