ошибка в конструкторе копирования при открытии allocator.h - PullRequest
0 голосов
/ 27 апреля 2020

В следующем коде я создал класс с именем 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));
    }
}

1 Ответ

1 голос
/ 27 апреля 2020

Это потому, что ваш конструктор копирования должен принять const ele &

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