C++中关于深浅拷贝的区别的一个重载问题
发布网友
发布时间:2022-04-18 07:23
我来回答
共2个回答
热心网友
时间:2022-04-18 08:53
深拷贝和浅拷贝,取决于你实现的目标和实现的方法。
比如同是String 类,设计如下:
首先设计一个StringData类,用于保存String的内容,
public class StringData
{
char *data;
private int mRefCount;
public StringData(){mRefCount = 1;}
public StringData(const char*p){//new char 并且copy}
void ref(){mRefCount ++;}
void deRef( if(--mRefCount == 0) delete []data;}
}
然后我以对StringData的引用计数来跟踪,这样多个String可以拥有同一份StringData,而该StringData的引用数等于拥有自己的String对象个数,当所有的String对象都不再引用自己的时候(就是所有String对象都析构了, 字节也会释放分配的字符串数组。
这样就是浅拷贝了。
浅拷贝有利于节省内存,同样内容的字符串比如"Hello world",使用深拷贝,会每个String对象都持有一份,使用浅拷贝,则只有一份在内存中。
热心网友
时间:2022-04-18 10:11
通俗点将深拷贝指的的是复制另外一个对象到自己对象中去,且两者不共享一个内存区,浅拷贝指的是两者共享同一个内存区,STRING(const char *c=NULL); 函数属于类的构造函数,不属于拷贝函数!不知道这么讲你会不会有点理解呢?