1
GeruzoniAnsasu 2018 年 9 月 18 日
https://wiki.qt.io/New_Signal_Slot_Syntax
其实我很想翻一个 connect()的定义出来的,但居然找不到,也是醉了 想要回调一个成员函数的时候就必然要用成员函数指针,也就会用到这俩运算符 |
2
GeruzoniAnsasu 2018 年 9 月 18 日
不过感觉更常见的写法是 bind 成一个 functor ? bind 能不能完全替代成员指针就不清楚了
|
3
MeteorCat 2018 年 9 月 18 日 在 C 之中[&引用实在 C++之中才有]
struct ctx{}; void echo(ctx *c){ //do something //这样 c->speak(); } 而在 C++没有 std::move 值转义的时候 void echo(ctx &c){//这种引用化会导致重复调用构造 /析构 c.speak();//此时使用指针来调用的话性能更好点,防止重复构造 /析构 } C++11 带有 std::move 语义之下 void echo(ctx &&c){//std::move(ctx);将值语义变化,不再多次触发构造和析构 c.speak();//不再需要指针来防止多次构造和析构 } 其实`->`|`.`取决于你开发的程序 如果是打算开发跨 C/C++的话,需要注意 void echo(ctx &c)这种在 C 不成立,也就不能够出现传入一个 struct 之后直接`.`来调用对象; 如果是低于 C++11 的话,也需要使用插入指针引用,使用`->`防止对象被多次构造析构; 如果是高于等于 C++11 则直接使用 std::move 来转化对象值语义从而使用`.`来调用对象; ----------------------------------------------- 以上可能有很多出错,主要很多知识点都忘了所以凭印象写,具体知识点可以查看《高质量程序设计指南:C++/C 语言》第三版的 7.5 章 |
4
jedihy 2018 年 9 月 18 日 via iPhone
->*是什么意思? 像 foo->bar 这样吗?这难道不是最常见的语法吗?
|
6
zynlp OP |
8
innoink 2018 年 9 月 18 日 via Android
这个应该是成员函数指针
|
11
neoblackcap 2018 年 9 月 18 日
|
12
GeruzoniAnsasu 2018 年 9 月 18 日
来看一个好玩的例子
初衷是想猜一下 QT5 connect() 的实现,不过中途有了其它想法 用成员指针可以一路记录下每个调用链,直到调用触发函数的时候才一并一起调用 https://gist.github.com/pnck/d92e10d778ca285407b068ead990befd |
14
MeteorCat 2018 年 9 月 18 日 via Android
@neoblackcap 是的,刚测试下确实没有额外析构,最近忙昏头才把复制拷贝混在一起了,感谢指出错误
|