如何将 class 中指向另一个 class 的指针复制到 C++ 中的另一个指针?

How can I copy a pointer to another class within a class to another pointer in C++?

换句话说,我怎样才能将不同 class 中的 class 类型的指针复制到相同 class 类型的另一个指针.

举个例子:

class Bananas
{
    private:
        int peel;
        string color;
};

class Apples
{
    private:
        Bananas *ptr1;
        Bananas *ptr2;

    public:
        void copyPointers();
};

在上面的例子中,我需要将ptr1的值复制到ptr2

注:ptr2为空。

失败的尝试 #1:

memcpy(ptr2, ptr1, strlen(ptr1)+1);

失败的尝试#2:

ptr2 = ptr1;

更新:

进一步解释我的功能:

void Apples::copyPointers()
{
    ptr2 = ptr1;
}

如果需要拷贝指针的值(内存地址):

ptr2 = ptr1;

现在 ptr2 将指向与 ptr1 相同的对象。

如果您需要复制ptr1指向的对象,并将新对象赋值给ptr2:

ptr2 = new Bananas(*ptr1);

这将使用 ptr1 指向的对象调用 Bananas 复制构造函数。之后记得 delete ptr2(或使用 std::unique_ptr 自动为您完成这项苦差事)。

#include <iostream>
using namespace std;

int main() {
    int *ptr1;
    int *ptr2;

    ptr2 = ptr1;
    *ptr1 = 21;
    std::cout << *ptr2 << std::endl;
    return 0;
}

似乎工作正常。 我不明白为什么 ptr2 = ptr1 不起作用。

但是,如果您创建 Bananas 的一个实例,然后将其取消引用到 ptr1 中,则会为 ptr1 分配一个新值;但 ptr2 仍将具有旧值...指向 Bananas 类型的空值。

编辑: 使用结构的扩展示例(类 变相):

#include <iostream>
using namespace std;
struct A
{
    int val;    
};

int main() {
    A a;
    A *ptr1;
    A *ptr2;

    ptr2 = ptr1; // ptr1 is nothing, so ptr2 is the same nothing now.

    ptr1 = &a; // ptr1 is now something! But ptr2 is still the old nothing.
    ptr1->val = 21;
    ptr2 = ptr1; // Assign ptr1's something to ptr2's nothing
    std::cout << ptr2->val << std::endl; // ptr2 is now pointing at the same object as ptr1.
    return 0;
}

所以首先你需要一个 Banana 的拷贝构造函数。

class Banana {
  Banana (const Banana& b): peel(b.peel), color(b.color) {}
};

然后,在 Apple 内部,您从旧香蕉构建了一个新香蕉

Banana* ptr2 = new Banana(*ptr1);

我不清楚你为什么要使用指针,但你知道了。 如果要删除第一个 Banana,

delete ptr1;