- 主题:对象指针赋值时,到底用了哪种赋值操作符?
忽然有点想不通了,只有类与枚举型可以重载操作符,
对象指针到底怎么赋值的呢?例如
class A { A(){} };
A *p = new A;
这里赋值操作符的原型应该是
A *operator=(A *, const A *const);
但不能重载!!
--
FROM 115.239.231.*
重载new?
【 在 easior 的大作中提到: 】
: 忽然有点想不通了,只有类与枚举型可以重载操作符,
: 对象指针到底怎么赋值的呢?例如
: class A { A(){} };
:
: A *p = new A;
: 这里赋值操作符的原型应该是
: A \*operator=(A \*, const A *const);
: ..................
发自「今日水木 on M2007J17C」
--
FROM 43.243.12.*
你的理解是歪的。
指针赋值跟对象本身无关。
可以看成void* p = malloc_for_A();
【 在 easior (潜行) 的大作中提到: 】
: 标 题: 对象指针赋值时,到底用了哪种赋值操作符?
: 发信站: 水木社区 (Wed Jun 9 22:45:20 2021), 站内
:
: 忽然有点想不通了,只有类与枚举型可以重载操作符,
: 对象指针到底怎么赋值的呢?例如
: class A { A(){} };
:
: A *p = new A;
: 这里赋值操作符的原型应该是
: A *operator=(A *, const A *const);
: 但不能重载!!
:
: --
:
: ※ 来源:·水木社区 newsmth.net·[FROM: 115.239.231.*]
--
FROM 76.126.252.*
作为自定义类型,似乎重载 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;
这个你想重载吗?
【 在 easior (潜行) 的大作中提到: 】
: 标 题: Re: 对象指针赋值时,到底用了哪种赋值操作符?
: 发信站: 水木社区 (Thu Jun 10 06:46:59 2021), 站内
:
: 确实,理解上肯定出了问题
: 但是你这样解释也有问题:
: 1、空类型指针的转型怎么办?
: A *p = reinterpret_cast<A *>(p);
: 需要重载 cast 吗?
: 2、对象指针是否一定是空类型指针?
: 比如类成员指针就不可能是空类型指针,它俩大小不一样。
:
: 总之,不知道哪里钻了牛角尖
:
: 【 在 here080 (hero080) 的大作中提到: 】
: : 你的理解是歪的。
: : 指针赋值跟对象本身无关。
: : 可以看成void* p = malloc_for_A();
: : ...................
:
: --
:
: ※ 来源:·水木社区 newsmth.net·[FROM: 115.239.231.*]
--
FROM 76.126.252.*
啊,指针不是就指向一个地址吗
转型只是编译期间有效,运行时其实无所谓
都不知道现在指针的大小都还有不同,现在C++这么夸张了
【 在 easior 的大作中提到: 】
: 确实,理解上肯定出了问题
: 但是你这样解释也有问题:
: 1、空类型指针的转型怎么办?
: ...................
--
FROM 124.248.141.*
所有不需要重载的操作符,按个人的理解是编译器已预定义了,例如
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.*
我不懂,我不是C或者C++程序员
只是大学里学过
我的理解是指针本身指向一个地址而已,赋值就是改下存储的地址
和int a = b 一样,是直接值复制过去的
所以没有什么重载
【 在 easior 的大作中提到: 】
: 钻牛角尖,求点醒
:
: 偶然发现的,类成员指针的大小与众不同
: ...................
--
FROM 124.248.141.*