Может ли конструктор копирования принимать неконстантный параметр?

У меня есть эта проблема, есть функцияfoo() следующее,

vector<ClassA> vec;

void foo()
{
    ClassA a;   //inside foo, a ClassA object will be created
    a._ptr = new char[10];

    vec.push_back(a);   //and this newly created ClassA object should be put into vec for later use
}

И AFAIK,vec вызоветClassAcopy-ctor для создания копии вновь созданного объектаaи вот проблема. Если я определюClassAобычным способом,

ClassA::ClassA(const ClassA &ra) : _ptr(0)
{
    _ptr = ra._ptr;
}

тогда возразитьa и его копия (созданная vec) будет иметь указатели_ptr указывая на ту же область, когдаfoo отделки,a вызовет деструктор, чтобы освободить_ptr, затемaкопия вvec будет висящий указатель, верно? В связи с этой проблемой я хочу реализоватьClassAтаким образом, copy-ctor,

ClassA::ClassA(ClassA &ra) : _ptr(0) //take non-const reference as parameter
{
    std::swap(_ptr, a._ptr);
}

Моя реализация в порядке? Или любой другой способ может помочь выполнить работу?

Ответы на вопрос(5)

Ваш ответ на вопрос