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

时间:2015-04-14 02:22:05

标签: c++ class pointers copy private

换句话说,如何获取不同类中的类类型的指针并将其复制到同一类类型的另一个指针。

以下是一个例子:

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;
}

3 个答案:

答案 0 :(得分:1)

如果需要复制指针的值(内存地址):

ptr2 = ptr1;

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

如果您需要复制ptr1指向的 对象 ,并将该新对象分配给ptr2

ptr2 = new Bananas(*ptr1);

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

答案 1 :(得分:0)

#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;
}

答案 2 :(得分:0)

首先,您需要Banana的复制构造函数。

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

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

Banana* ptr2 = new Banana(*ptr1);

我不清楚你为什么使用指针,但是你去了。 如果你想删除第一个香蕉,

delete ptr1;