【发布时间】:2010-12-10 13:58:07
【问题描述】:
class MD {
MD();
MD(const MD &obj);
MD& operator=(const MD &obj);
private:
int Name;
double sal;
};
typedef std::shared_ptr<MD> mDataPtr;
typedef std::vector<mDataPtr> mDataVecContr;
typedef std::shared_ptr<mDataVecContr> ptrMdataVecContr;
class MDataContainer{
public:
MDataContainer();
MDataContainer(const MDataContainer &mDataCont);
MDataContainer& operator=(const MDataContainer &mDataCont);
private:
mDataVecContr vecNode;
std::deque<ptrMdataVectContr> mDataQueContr;
};
我的要求是将 500 个 MD 类型的对象存储在一个向量中,然后我将指向这些向量的指针保存在双端队列中。这里的问题是如何在复制构造函数 MDataContainer(const MDataContainer &mDataCont) 中初始化这个列表,并在重载赋值运算符 MDataContainer& operator=(const MDataContainer &mDataCont) 中分配它。为了摆脱代码重复,我使用了 Init 函数。请向我解释一种可以提供更好性能的方法。我已经在使用一些粗略的方法。我们能不能有一些算法或其他库(我没有 gr8 的想法)可以用来解决这类问题。
【问题讨论】:
-
不要得到你想做的事。发布您已经拥有的“慢”代码怎么样。
-
w817,您是否有 1 个包含 500 个条目的向量和一个包含 1 个条目的双端队列,其中有一个指向您的向量的指针,或者您是否有一个指向向量的双端队列和 1 个额外的向量?基本上你想要一种有效的方式来复制 MDataContainer?
-
编译器生成的拷贝构造函数有什么问题?在您提供的示例代码中,编译器将生成一个复制构造函数和复制赋值运算符(如果您自己没有定义它们),它们应该为您做正确的事情。
-
@它的指向向量的双端队列(不是双端队列中的单个向量)。
-
@Bowie Owens 它包含太多的指针,浅拷贝不起作用。