在不使用 std::copy 函数的情况下编写这个复杂的复制结构体

Writing this complicated copy costructor without using std::copy function

本文关键字:复杂 结构体 复制 情况下 std copy 函数      更新时间:2023-10-16

请解释如何在不使用std::copy函数的情况下为此类编写复制构造函数。

class A {
    public:
        struct B {
            int aaprikhat;
            B* bajja;
        }
        A() : x(0) {}
        A(const A&)
    private:
        B* bajookha;    
}

这是我的尝试:

A::A(const A& a) {
    this->bajookha = new B();
    this->bajookha->aaprikhat = a.bajookha->aaprikhat;
    this->bajookha->bajja = a.bajookha->bajja; // I think this is wrong
    //I even tried doing this:
    //this->bajookha->bajja = new B();
    // But how to copy data from a.bajookha->bajja to this->bajookha->bajja?
}

正如你所看到的,我严重陷入了某种递归的东西中。 :(

复制构造函数的语义应该是创建一个新的相同对象,该对象不与原始对象共享任何资源。实现应该是这样的:

class A {
public:
    struct B {
        int aaprikhat;
        B* bajja;
        B() : aaprikhat(0), bajja(nullptr) {}
        B(B& obj) : aaprikhat(obj.aaprikhat) {
            if (obj.bajja != nullptr)
                bajja = new B(*obj.bajja);
            else
                bajja = nullptr;
        }
    };
    A() : x(0), bajookha(nullptr) {}
    A(const A& obj) : x(obj.x) {
        if (obj.bajookha != nullptr)
            bajookha = new B(*obj.bajookha);
        else
            bajookha = nullptr;
    }
private:
    B* bajookha;
    int x;
};

我想这是学习 c++ 复制构造函数的某种练习。此示例解决了您的问题,但它是低级代码,如果标准库中实现了可能解决您的问题的内容,则应特别避免它。

PD:你还应该实现一个复制赋值运算符。感谢Matt McNabb的其余部分。