指针和副本

Fri*_*n3L 0 c++ copy reference

我从C++开始,我对指针有一些疑问,而且它是副本.

我打算写一个例子:

class Abc{
  Qwe q;
}

Abc* a = new Abc();
Abc* b = new Abc();
b->q = a->q; //??
Run Code Online (Sandbox Code Playgroud)

这项任务会发生什么?是'a'将'q'的副本给'b'?

问题是我想对两个指针都有不同的'q',我不知道如何复制它.就像在例子中?

谢谢

Jos*_*eld 6

您有未定义的行为,因为您正在取消引用未初始化的指针.那些指针实际上并没有指向任何地方.您需要Abc为它们创建一些指向的对象.一种方法是:

Abc a_object;
Abc b_object;
Abc* a = &a_object;
Abc* b = &b_object;
Run Code Online (Sandbox Code Playgroud)

完成此操作后,您的赋值表达式将复制a->qb->q.究竟会发生什么取决于定义Qwe(也可以简单复制的价值a->q或调用拷贝赋值运算符).

相反,如果你已经有了一个Qwe*类里面,你也只是复制该指针,而不是它指向的对象.C++默认为值语义,这意味着事物被复制.甚至当你复制一个指针,让你得到另一个指针指向同一个对象与原始,你还在复制指针.所有你需要做鉴定的是什么复制是看看什么是对分配的右手边.在这里我们可以看到它是a->q,我们知道a->qQwe这样的Qwe对象被复制.