std::vector存储指针后深拷贝的问题

时间:2022-12-25 19:52:45
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操作,就不应该深度拷贝,只是浅复制就可以了。

#5


设计确实有点复杂,你不如重新封装一个自己的vector,一劳永逸地解决这个问题。

不应该将问题放到这个层面。

#6


楼主的设计可能是想用到观察者模式吧。深拷贝就是重新生成一份内容,不只是拷贝地址。new

#7


确实逻辑好复杂 = = 。

#1


m_v_subline.push_back(new CPoolLine(**itr));

#2


你这个设计是不是有些问题,类里为什么会有两个保存自己类型的vector呢
是不是应该拆分为两个类,那样逻辑应该会简单不少吧

#3


好复杂的设计。 

#4


应该先把析构函数写了才拷贝和赋值构造怎么写。

假如你的析构没有delete操作,就不应该深度拷贝,只是浅复制就可以了。

#5


设计确实有点复杂,你不如重新封装一个自己的vector,一劳永逸地解决这个问题。

不应该将问题放到这个层面。

#6


楼主的设计可能是想用到观察者模式吧。深拷贝就是重新生成一份内容,不只是拷贝地址。new

#7


确实逻辑好复杂 = = 。