首页 > 解决方案 > 复制构造函数打开 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));
    }
}

标签: c++copy-constructor

解决方案


这是因为您的复制构造函数应该采用const ele &

ele(const ele &s):ele(*s.data_ptr) {
    cout<<"object with data="<<*data_ptr<<" copied"<<endl;
}

推荐阅读