按理说指针类型应该还可以用指针的指针**接收,
或者使用指针的引用接收才对。
但是事实上我尝试使用另外两种方法接收实例化结果却失败了。。
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的值会报错。。。有什么办法吗?
针对第三个问题,我直接把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类型不同啊