Может ли конструктор копирования принимать неконстантный параметр?
У меня есть эта проблема, есть функция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
вызоветClassA
copy-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);
}
Моя реализация в порядке? Или любой другой способ может помочь выполнить работу?