C++ 未分配要释放的delete[]指针
我使用new操作符创建一个动态分配的数组(我使用这个是因为我想节省使用向量的内存开销)。该错误发生在析构函数中,表示被释放的指针没有被分配,尽管它显然是被分配的。构造函数和析构函数如下所示:C++ 未分配要释放的delete[]指针,c++,new-operator,C++,New Operator,我使用new操作符创建一个动态分配的数组(我使用这个是因为我想节省使用向量的内存开销)。该错误发生在析构函数中,表示被释放的指针没有被分配,尽管它显然是被分配的。构造函数和析构函数如下所示: ~Path() { printf("Path Destructor\n"); if(points) { delete[] points; } } Path(const std::vector<PathPoint>& points_) { s
~Path() {
printf("Path Destructor\n");
if(points) {
delete[] points;
}
}
Path(const std::vector<PathPoint>& points_) {
size = points_.size();
points = new PathPoint[size];
int i = 0;
for(const PathPoint& p : points_) {
points[i++] = p;
}
printf("Path created\n");
}
~Path(){
printf(“路径析构函数”);
如果(点数){
删除[]点;
}
}
路径(常数标准::向量和点){
大小=点大小();
点=新路径点[大小];
int i=0;
用于(常量路径点&p:points_u2;){
点[i++]=p;
}
printf(“创建的路径”);
}
您必须申请:
< C++标准>:
非联合类X的隐式定义的复制构造函数
执行其子对象的成员复制。[n3126.pdf第12.8节
§16]
非联合类的隐式定义的复制赋值运算符
X执行其子对象的成员复制指定。[n3126.pdf]
第12.8节§30]
因此,为Path
类隐式定义的复制构造函数和复制赋值运算符将不会为您调用new[]
定义执行所需分配的复制构造函数和复制分配生成器
注意:
- 您还可以使您的类型不可复制,在不定义的情况下声明它们:
Path( const Path& other ); // non construction-copyable
Path& operator=( const Path& ); // non copyable
(或使用)
的典型开销非常低,很少有真正重要的上下文:尽可能多地使用它来避免此类问题std::vector
- 您必须申请:
< C++标准>:
非联合类X的隐式定义的复制构造函数
执行其子对象的成员复制。[n3126.pdf第12.8节
§16]
非联合类的隐式定义的复制赋值运算符
X执行其子对象的成员复制指定。[n3126.pdf]
第12.8节§30]
因此,为
Path
类隐式定义的复制构造函数和复制赋值运算符将不会为您调用new[]
定义执行所需分配的复制构造函数和复制分配生成器
注意:
- 您还可以使您的类型不可复制,在不定义的情况下声明它们:
Path( const Path& other ); // non construction-copyable
Path& operator=( const Path& ); // non copyable
(或使用)
的典型开销非常低,很少有真正重要的上下文:尽可能多地使用它来避免此类问题std::vector
- 您必须申请:
< C++标准>:
非联合类X的隐式定义的复制构造函数
执行其子对象的成员复制。[n3126.pdf第12.8节
§16]
非联合类的隐式定义的复制赋值运算符
X执行其子对象的成员复制指定。[n3126.pdf]
第12.8节§30]
因此,为
Path
类隐式定义的复制构造函数和复制赋值运算符将不会为您调用new[]
定义执行所需分配的复制构造函数和复制分配生成器
注意:
- 您还可以使您的类型不可复制,在不定义的情况下声明它们:
Path( const Path& other ); // non construction-copyable
Path& operator=( const Path& ); // non copyable
(或使用)
的典型开销非常低,很少有真正重要的上下文:尽可能多地使用它来避免此类问题std::vector
- 您必须申请:
< C++标准>:
非联合类X的隐式定义的复制构造函数
执行其子对象的成员复制。[n3126.pdf第12.8节
§16]
非联合类的隐式定义的复制赋值运算符
X执行其子对象的成员复制指定。[n3126.pdf]
第12.8节§30]
因此,为
Path
类隐式定义的复制构造函数和复制赋值运算符将不会为您调用new[]
定义执行所需分配的复制构造函数和复制分配生成器
注意:
- 您还可以使您的类型不可复制,在不定义的情况下声明它们:
Path( const Path& other ); // non construction-copyable
Path& operator=( const Path& ); // non copyable
(或使用)
的典型开销非常低,很少有真正重要的上下文:尽可能多地使用它来避免此类问题std::vector
点大小()
?还有其他构造函数吗?向量的内存开销是多少?您是否定义了复制构造函数和/或复制赋值运算符?@n尽管不同,大小通常为1-5。在我的情况下,它崩溃了2次,但我认为这无关紧要。没有默认构造函数。是的,复制和赋值在这里很重要。阅读“三分法则”,或使用C++11“零(或五分法则)”(RAII)。什么是points\uuu.size()
?还有其他构造函数吗?向量的内存开销是多少?您是否定义了复制构造函数和/或复制赋值运算符?@n尽管不同,大小通常为1-5。在我的情况下,它崩溃了2次,但我认为这无关紧要。没有默认构造函数。是的,复制和赋值在这里很重要。阅读“三分法则”,或使用C++11“零(或五分法则)”(RAII)。什么是points\uuu.size()
?还有其他构造函数吗?向量的内存开销是多少?您是否定义了复制构造函数和/或复制赋值运算符?@n尽管不同,大小通常为1-5。在我的情况下,它崩溃了2次,但我认为这无关紧要。没有默认构造函数。是的,复制和赋值在这里很重要。读一读“三的规则”,或者用C++11读一读“零(或五)的规则”(RAII)。什么是积分