C++ 深拷贝、浅拷贝

说到深浅拷贝前,先来看两个现象,关于基本类型类对象的赋值、复制,看看有什么奇怪的事情发生。

  • 基本类型进行=号运算时,现象和我们常理是相同的,不存在异样
int a = 10;   
int b = a;
b = 2;

它们之间的赋值、复制过程是很简单的。但是对于类对象来说,其内部存在各种类型成员变量,在拷贝过程中会出现问题。如下:

#include   
#include   

using namespace std;
class String 
{
public:
	String(const char* psz = NULL) : m_psz(strcpy((new char[strlen(psz ? psz : "") + 1]), psz ? psz : "")) 
	{
		cout << "String构造" << endl;
	}

	~String() 
	{
		if (m_psz)
		{
			delete[] m_psz;
			m_psz = NULL;
		}
		cout << "String析构" << endl;
	}
	char* c_str(void) 
	{
		return m_psz;
	}

private:
	char* m_psz;
};

int main() 
{
	String s1("hello");
	String s2(s1);

	cout << "s1    " << s1.c_str() << endl;
	cout << "s2    &#

你可能感兴趣的:(C++《i+1》,c++,开发语言)