Czy konstruktor kopii może przyjąć parametr inny niż stały?
Mam ten problem, jest funkcjafoo()
następująco,
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
}
I AFAIK,vec
wywołaClassA
kopia-ctor, aby utworzyć kopię nowo utworzonego obiektua
i tutaj jest problem. Jeśli zdefiniujęClassA
kopia jest zwykłym sposobem,
ClassA::ClassA(const ClassA &ra) : _ptr(0)
{
_ptr = ra._ptr;
}
następnie obiekta
a jego kopia (utworzona przez vec) będzie miała wskaźniki_ptr
wskazując na ten sam obszar, kiedyfoo
wykończenia,a
wywoła destruktor, aby go zwolnić_ptr
, następniea
kopia wvec
będzie zwisającym wskaźnikiem, prawda? Z powodu tego problemu chcę go wdrożyćClassA
kopia w ten sposób,
ClassA::ClassA(ClassA &ra) : _ptr(0) //take non-const reference as parameter
{
std::swap(_ptr, a._ptr);
}
Czy moja implementacja jest w porządku? Lub w jakikolwiek inny sposób może pomóc w realizacji zadania?