class CPoolLine
{
private:
double m_max_x;
double m_min_x;
double m_max_y;
double m_min_y;
unsigned int m_start;
unsigned int m_end;
int m_data_pool_id;
vector<Slicepoint> m_v_slice_data;
vector<CPoolLine *> m_v_subline;
public:
CPoolLine();
~CPoolLine();
CPoolLine(const CPoolLine &pl) :
m_max_x(pl.m_max_x), m_min_x(pl.m_min_x), m_max_y(pl.m_max_y), m_min_y(pl.m_min_y),
m_start(pl.m_start), m_end(pl.m_end), m_data_pool_id(pl.m_data_pool_id),
m_v_slice_data(pl.m_v_slice_data)
{
vector<CPoolLine *>::const_iterator itr = pl.m_v_subline.begin();
for (; itr != pl.m_v_subline.end(); itr++)
{
//...?
}
}
}
能想到的就是如上了,不知这个深拷贝到底该怎么写
7 个解决方案
#1
m_v_subline.push_back(new CPoolLine(**itr));
#2
你这个设计是不是有些问题,类里为什么会有两个保存自己类型的vector呢
是不是应该拆分为两个类,那样逻辑应该会简单不少吧
是不是应该拆分为两个类,那样逻辑应该会简单不少吧
#3
好复杂的设计。
#4
应该先把析构函数写了才拷贝和赋值构造怎么写。
假如你的析构没有delete操作,就不应该深度拷贝,只是浅复制就可以了。
假如你的析构没有delete操作,就不应该深度拷贝,只是浅复制就可以了。
#5
设计确实有点复杂,你不如重新封装一个自己的vector,一劳永逸地解决这个问题。
不应该将问题放到这个层面。
不应该将问题放到这个层面。
#6
楼主的设计可能是想用到观察者模式吧。深拷贝就是重新生成一份内容,不只是拷贝地址。new
#7
确实逻辑好复杂 = = 。
#1
m_v_subline.push_back(new CPoolLine(**itr));
#2
你这个设计是不是有些问题,类里为什么会有两个保存自己类型的vector呢
是不是应该拆分为两个类,那样逻辑应该会简单不少吧
是不是应该拆分为两个类,那样逻辑应该会简单不少吧
#3
好复杂的设计。
#4
应该先把析构函数写了才拷贝和赋值构造怎么写。
假如你的析构没有delete操作,就不应该深度拷贝,只是浅复制就可以了。
假如你的析构没有delete操作,就不应该深度拷贝,只是浅复制就可以了。
#5
设计确实有点复杂,你不如重新封装一个自己的vector,一劳永逸地解决这个问题。
不应该将问题放到这个层面。
不应该将问题放到这个层面。
#6
楼主的设计可能是想用到观察者模式吧。深拷贝就是重新生成一份内容,不只是拷贝地址。new
#7
确实逻辑好复杂 = = 。