【发布时间】:2018-10-21 12:40:24
【问题描述】:
下面是我创建的示例类,都需要创建下面类的对象向量
#include <stdio.h>
#include "myvector.h"
#include <iostream>
class myvector
{
private:
double *elem;
int sz;
public:
myvector()
{
std::cout << " In Constructor \n";
}
~myvector()
{
std::cout << " In Destructor \n";
delete[] elem;
}
myvector(int s)
{
std::cout << " In Param Cons \n";
elem= new double[s];
}
myvector::myvector(const myvector& that)
{
this->sz=that.sz;
this->elem=that.elem;
}
myvector& operator=(const myvector& that)
{
return *this;
}
};
下面是主要功能
#include <iostream>
#include "myvector.h"
#include <vector>
int main(int argc, const char * argv[]) {
// insert code here...
myvector abc(10);
std::vector<myvector> abc(10,10);
getchar();
return 0;
}
myvector abc[10]; works perfectly and creates an array of objects
但是因为我需要为我在下面使用的所有这些对象调用参数构造函数
std::vector abc(10,10);
这实际上不是在创建数组,而是因为错误而失败
vector(16828,0x10013e380) malloc: * 对象 0x100400050 的错误:未分配被释放的指针 * 在 malloc_error_break 中设置断点进行调试
参数函数甚至没有被调用 10 次,它只被调用了一次
【问题讨论】:
-
当然,我读过它,但我知道为什么我需要复制构造函数吗?因为我没有复制任何东西,系统是否会为任何操作调用 copy con,如果是,那可能是什么?你的解释会很有帮助
-
我建议你把
myvector的构造函数explicit。然后你会开始注意到你在哪里创建了需要复制的对象。 -
添加了复制构造函数和赋值运算符,它们也可以工作。
-
仅仅添加它们是不够的(编译器已经合成了它们)。他们需要做正确的事。你的并不比编译器生成的好。考虑阅读how to debug small programs。