处理指针成员的另一个完全不同的方法,是给指针成员提供值语义。具有值
语义的类所定义的对象,其行为很像算术类型的对象:复制值型对象时,会得到
一个不同的新副本。对副本所做的改变不会反映在原有对象上,反之亦然。string
类是值型类的一个例子。
要使指针成员表现得像一个值,复制 HasPtr 对象时必须复制指针所指向的对
象:
HasPtr(const int &p, int i): ptr(new int(p)) 如果p是指针,上句&p和ptr(new int(p)) 是什么意思?

解决方案 »

  1.   

    HasPtr(const int &p, int i): ptr(new int(p))!!这里p语义上不是指针,不过32位平台上指针一般是4位的倒是可以强制转换为int!!&p是引用参数的标志,不是取址运算符!!ptr(new int(p))等价于HasPtr.ptr = new int(p);即给类成员ptr赋值new int(p)且*ptr = p;
      

  2.   

    HasPtr(const int &p, int i): ptr(new int(p)) 如果p是指针,上句&p和ptr(new int(p)) 是什么意思?
    ==============
    p不是指针,ptr是指针,括号里new了一个int,然后用p的值来初始化指针指向的值。
    int& p是引用