- 主题:对象指针赋值时,到底用了哪种赋值操作符?
忽然有点想不通了,只有类与枚举型可以重载操作符,
对象指针到底怎么赋值的呢?例如
class A { A(){} };
A *p = new A;
这里赋值操作符的原型应该是
A *operator=(A *, const A *const);
但不能重载!!
--
FROM 115.239.231.*
作为自定义类型,似乎重载 new 也有必要,
但很多时候不重载也行,肯定有默认行为,
或者说不清楚何时需要重载它?
【 在 GoGoRoger (逝者如斯夫) 的大作中提到: 】
: 重载new?
: 发自「今日水木 on M2007J17C」
--
FROM 115.239.231.*
确实,理解上肯定出了问题
但是你这样解释也有问题:
1、空类型指针的转型怎么办?
A *p = reinterpret_cast<A *>(p);
需要重载 cast 吗?
2、对象指针是否一定是空类型指针?
比如类成员指针就不可能是空类型指针,它俩大小不一样。
总之,不知道哪里钻了牛角尖
【 在 here080 (hero080) 的大作中提到: 】
: 你的理解是歪的。
: 指针赋值跟对象本身无关。
: 可以看成void* p = malloc_for_A();
: ...................
--
FROM 115.239.231.*
所有不需要重载的操作符,按个人的理解是编译器已预定义了,例如
int a = b;
编译器内部必定对应着一个
int& operator=(int&, const int&);
就算 operator<< 操作符也是,内置类型都预定义相关重载;
类作为自定义类型,其操作符重载都是遵循这一原则。
为什么对象指针就不需要重载操作符呢?
对象指针的赋值与对象类型无关的解释有点无力,
如果所有的指针与空类型指针内存开销一样,兴许我能接受;
但存在着这样的指针,它的内存开销与空类型指针不一样大。
【 在 here080 (hero080) 的大作中提到: 】
: 说了,这个赋值跟对象类型本身无关。
: 你就考虑int a = b;
: 这个你想重载吗?
: ...................
--
FROM 115.239.231.*
钻牛角尖,求点醒
【 在 donald2020 (donald2020) 的大作中提到: 】
: 啊,指针不是就指向一个地址吗
: 转型只是编译期间有效,运行时其实无所谓
: 都不知道现在指针的大小都还有不同,现在C++这么夸张了
偶然发现的,类成员指针的大小与众不同
--
FROM 115.239.231.*
(赋值)操作总是与类型相关联的,
整型赋值与指针赋值总有些区别吧?
难道只要位对位赋值就不需要重载了吗?
实际类里操作符的平凡重载也是允许的。
【 在 donald2020 (donald2020) 的大作中提到: 】
: 我不懂,我不是C或者C++程序员
: 只是大学里学过
: 我的理解是指针本身指向一个地址而已,赋值就是改下存储的地址
: ...................
--
FROM 115.239.231.*
那么问题来,成员指针也总需要赋值吧?
这下总归没法用 void *的赋值操作符解释了吧
【 在 here080 (hero080) 的大作中提到: 】
: 你别听他瞎扯。我们明明在讨论T*这种指针,他一定要把成员变量指针扯进来。
--
FROM 115.239.231.*
似乎只有两条不太懂:
1、修饰指针的类型是干什么的?大概是来决定指针所管辖的内存的有效范围,超过了就越界。从这个意义上来说,指针的操作肯定与类型有关,否则类型不安全。
2、重载new的作用?没有碰到上具体的例子,cppreference上的介绍好复杂,还请普及一下。
【在 foliver (Oliver) 的大作中提到: 】
: 你的基础知识是在是太弱了,需要好好补补基本概念。
: 指针是什么,计算机内部怎么表示指针,修饰指针的类型是干什么用的怎么用,new干了什么,构造函数什么时候被调用,重载new的作用是啥。赋值构造和拷贝构造的区别
: 你把这些问题能明白了,基本不会有疑问的。先网上查查这些问题的答案。
: ...................
--
修改:easior FROM 115.239.231.*
FROM 115.239.231.*
直说无妨。
【 在 finlab (挨踢卢瑟) 的大作中提到: 】
: 两个参数类型都不对
: 发自「今日水木 on iPhone 12」
--
FROM 115.239.231.*