• 深度复制


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

    博文链接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;
    }
    

  • 相关阅读:
    javascript 显示类型转换
    javascript 隐式类型转换
    inline/inline-block/block 的区别
    javascript 类型检测
    title与h1的区别、b与strong的区别、i与em的区别?
    CSS定位方式有哪些?position属性的值有哪些?他们之间的区别是什么?
    列出display的值,说明他们的作用。position的值, relative和 absolute定位原点是?
    语义化的理解
    src与href的区别
    img的alt和title的异同?
  • 原文地址:https://www.cnblogs.com/xiangshancuizhu/p/2049389.html
Copyright © 2020-2023  润新知