c++ - 复制构造函数打开 allocator.h 时出错
问题描述
在下面的代码中,我创建了一个名为 ele 的类,我试图将 ele 对象存储在向量 v 中。我通过将复制构造函数委托给以整数作为参数的构造函数来使用深度复制。我收到一个不寻常的错误,当我尝试运行它时,我的 IDE(devC++) 中打开了一个头文件 allocator.h,但我不知道出了什么问题。
如果我注释掉复制构造函数,程序将以浅拷贝运行而没有任何编译器错误(但是,这不是我想要做的)
#include <iostream>
#include <vector>
using namespace std;
class ele{
public:
int* data_ptr;
ele(int a) {
data_ptr=new int;
*data_ptr=a;
cout<<"new ele created with data="<<*data_ptr<<endl;
}
ele(ele &s):ele(*s.data_ptr) {
cout<<"object with data="<<*data_ptr<<" copied"<<endl;
}
~ele(){
cout<<*data_ptr<<"destroyed"<<endl;
delete data_ptr;
}
};
void display(ele a){
cout<<*a.data_ptr<<endl;
}
ele create(int k){
ele* a=new ele(k);
return *a;
}
int main(){
vector <ele> v;
int t=10;
while(--t)
{
v.push_back(create(t));
}
}
解决方案
这是因为您的复制构造函数应该采用const ele &
ele(const ele &s):ele(*s.data_ptr) {
cout<<"object with data="<<*data_ptr<<" copied"<<endl;
}
推荐阅读
- java - 如何使用 ant 编译 drools 项目?
- python - 即使定义了函数,对象也没有属性
- pandas - Python pandas:比 numpy.select 更快的方式?
- intune - 是否可以通过 Intune 推送的 appinstaller 更新 MSIX 包
- string - 在 python 3 中处理长字符串时 IDLE 挂起
- c# - 更新拥有的实体 EF Core 5
- html - 为什么使用响应式设计时寺庙区域不改变?
- python - 使用循环网络的电影评论分类
- flutter - Fluuter build apk:无法解析配置“:classpath”的所有工件
- conditional-statements - 条件中的 SQL 条件