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łaClassAkopia-ctor, aby utworzyć kopię nowo utworzonego obiektuai tutaj jest problem. Jeśli zdefiniujęClassAkopia 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ępnieakopia wvec będzie zwisającym wskaźnikiem, prawda? Z powodu tego problemu chcę go wdrożyćClassAkopia 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?

questionAnswers(5)

yourAnswerToTheQuestion