深度复制

找了个代码,但不知道问题在哪?

博文链接http://www.cnitblog.com/qingchunjun/archive/2006/12/28/21212.html

“今天在学习c++的深度复制概念时,发现c++中的字符数组和字符指针两种形式的数据进行深度复制时,有一些小小的差异,本人初学,特记之,以防遗忘。

c++中,当一个字符串以字符数组的形式定义时,都具有数组长度的定义,以char
str[30]为例。这时代表系统已经分配了30个字节的内存给该变量,所以在执行深度复制时,一般采用strncpy函数进行复制,而不用new的形式
分配新的内存。而当一个字符串是以字符指针的形式定义时,则代表该变量将在程序执行时才给予分配内存,这种形式的变量在执行深度复制时,一般需要根据
strlen函数确定的字节数大小来new一个新的内存给这个指针,然后再利用strcpy进行字符串的复制,这就是所谓的动态分配内存。举例说明如下
(代码在borland C++6.0下调试通过):”


#include <iostream>
using namespace std;
class example{
private:
	enum{SIZE=30};
	char str[SIZE];
	char *cp;
public:
	example(){str[0]='\0';cp=NULL;}
	example(const char *,const char *);
	example(const example &);
	~example();
	void show() const;
};


example::example(const char *s,const char *p){
	std::strncpy(str,s,SIZE-1);
	str[SIZE]='\0';
	cp=new char[std::strlen(p)+1];
	strcpy(cp,p);
}
example::example(const example &e){
	std::strncpy(str,e.str,SIZE-1);
	str[SIZE]='\0';
	cp=new char[std::strlen(e.cp)+1];
	strcpy(cp,e.cp);
}
example::~example(){delete []str;}
void example::show() const{
	std::cout << str <<std::endl;
	std::cout << cp <<std::endl;
}

int main(){
	example e1("ok","good");
	example e2(e1);
	e1.show();
	e2.show();
	std::cin.get();
	return 0;
}

原文链接: https://www.cnblogs.com/xiangshancuizhu/archive/2011/05/17/2049389.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    深度复制

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/25671

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 上午3:27
下一篇 2023年2月8日 上午3:29

相关推荐