首頁  >  問答  >  主體

C++类实例化生成的是指针,那么为什么该指针只能用class *name接收呢?

按理说指针类型应该还可以用指针的指针**接收,
或者使用指针的引用接收才对。
但是事实上我尝试使用另外两种方法接收实例化结果却失败了。。

MyClass *mc = new MyClass(11);
MyClass **mc = new MyClass(11);  //错误
MyClass *&mc = new MyClass(11);  //错误

我想问一下为什么这么做不行呢? 还是说我的写法有什么问题?


2016/8/9
感谢各位大大的回答, 第二条问题已解决 可改为

  MyClass *mc = new MyClass(11);
  MyClass **mmc = &mc;  

补充说明:第三条问题语法检测是没错的,我的思路是用指针的引用接收,ide并没有错误提示,但是编译无法通过...
我改为采用第二种方式

 MyClass *mc = new MyClass(11);
 MyClass *&mmc = mc;

这样却没问题,为什么一开始new返回的指针无法用引用来处理呢?
还有。。 第二种方法直接&new的值会报错。。。有什么办法吗?

ringa_leeringa_lee2714 天前560

全部回覆(5)我來回復

  • PHP中文网

    PHP中文网2017-04-17 14:29:35

    針對第三個問題,我直接把MyClass換成的int。
    因為new int回傳的是位址啊,int& 是左值引用,而new int出來的位址是一個右值,引用是物件或變數的別名,但new int出來的則是常數位址啊,相當於一個數,例如2或3吧,類似int& a = 2, 這樣不行的。用右值引用可以編譯通過int* &&a = new int(2)

    回覆
    0
  • 高洛峰

    高洛峰2017-04-17 14:29:35

    類型不符啊,例如MyClass **mc = new MyClass(11);,左邊是MyClass **類型,右邊是MyClass *類型,怎麼賦值呢

    回覆
    0
  • 怪我咯

    怪我咯2017-04-17 14:29:35

    你的理解一開始就有問題。
    1.C++類別實例化產生的是指標。
    這是錯的! ! !
    一般應該這樣理解,C++類,new出一個對象,回傳一個指向該對象的指針。
    2.那為什麼該指標只能用class *name接收呢?

    MyClass *mc中mc的類型是:
    指向MyClass類別的物件的指標

    new MyClass(11)回傳的是一個指針,指標型別是:
    指向MyClass類別的物件的指針

    而MyClass **mc中的mc的類型是:
    指向MyClass類別的物件的指標的指標
    你比較一下兩個資料型別有什麼不同
    另外,MyClass *&mc,這種寫法,沒看過。照我理解,這是文法錯誤。

    回覆
    0
  • 怪我咯

    怪我咯2017-04-17 14:29:35

    左右型別不同意,賦值失敗

    回覆
    0
  • 阿神

    阿神2017-04-17 14:29:35

    new MyClass(11);回傳型別是 Myclass*,,lvalue和rvalue型別不同啊

    回覆
    0
  • 取消回覆