C++类实例化生成的是指针,那么为什么该指针只能用class *name接收呢?
ringa_lee
ringa_lee 2017-04-17 14:27:35
0
5
594

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

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_lee
ringa_lee

ringa_lee

全部回复(5)
洪涛

针对第三个问题,我直接把MyClass换成的int。
因为new int返回的是地址啊,int& 是左值引用,而new int出来的地址是一个右值,引用是一个对象或者变量的别名,但是new int出来的是一个常量地址啊,相当于一个数,比如2或者3吧,类似于int& a = 2, 这样不行的。用右值引用可以编译通过int* &&a = new int(2)

小葫芦

类型不匹配啊,比如MyClass **mc = new MyClass(11);,左边是MyClass **类型,右边是MyClass *类型,怎么赋值呢

刘奇

你的理解一开始就有问题。
1.C++类实例化生成的是指针。
这是错的!!!
一般应该这样理解,C++类,new出一个对象,返回一个指向该对象的指针。
2.那么为什么该指针只能用class *name接收呢?

MyClass *mc中mc的类型是:
指向MyClass类的对象的指针

new MyClass(11)返回的是一个指针,指针类型是:
指向MyClass类的对象的指针

而MyClass **mc中的mc的类型是:
指向MyClass类的对象的指针的指针
你对比一下两个数据类型有什么不同
另外,MyClass *&mc,这种写法,没见过。按我理解,这是语法错误。

刘奇

左右类型不同意,赋值失败

阿神

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板