【发布时间】:2013-10-12 06:04:19
【问题描述】:
我尝试为指向对象的指针向量编写一个复制构造函数,该对象在类 Shop 中初始化和声明。考虑的向量是:
std::vector <gCustomer*> vCustomer;
在gShop的构造函数中也已经声明,在析构函数中通过循环删除。
现在我想在复制构造函数中获得指针向量的深层副本。但实际上没有任何内容被复制,如果我设法运行程序并访问 vCustomer,对其大小的检查仍然为零或使程序崩溃。 (请注意,如果我将复制构造函数排除在外,以便使用默认的复制构造函数,则程序运行正常)
gShop::gShop(const gShop & cShop)
{
for(int i = 0; i < (int)vCustomer.size(); ++i)
{
vCustomer[i] = cShop.vCustomer[i];
}
}
谢谢
注意我也有指定的操作员
gShop gShop::operator=(const gShop & rhs)
{
if (this == &rhs) return *this;
for(int i = 0; i < (int)vCustomer.size(); ++i)
{
delete vcustomer[i];
vCustomer[i] = new gCustomer;
vCustomer[i]= rhs.vCustomer[i];
}
}
【问题讨论】:
-
什么版本的 C++ 和你使用什么编译器?最好使用 C++11,试试std::shared_ptr 即
std::vector<std::shared_ptr<gCustomer>> -
我不能使用 C++11.. 不知何故我不能用我的 opengl 东西编译它。我已经下载了boost,但我不知道如何安装它。我有 GCC 4.3.5。
-
升级到较新版本的 GCC。 4.3 真的很旧 - 在 2010 年之前 - (并且不符合 C++11 标准)。当前的GCC 是 4.8.1(4.8.2 应该会在一两周内出现)
-
这一切都很复杂。我在 5 年前开始了这个程序。它真的很大,而且有一些 opengl 的东西。如果我要升级,恐怕会需要大量的维护和重写。基本上当我尝试 GCC 4.8 时,我的编译器说不。当我升级我的编译器时,我的程序说不。
-
我仍然认为使用 C++11(使用最新的 C++ 编译器,如 GCC 4.8 或 CLANG 3.3)确实值得付出努力。你的程序有多大(数百万行)?
标签: c++ copy-constructor