c++ 知识点待巩固

简介C++中四种类型转换是:static_cast, dynamic_cast, const_cast, reinterpret_cast dynamic_cast 针对的父类和子类之间的转换,对应指针和引用异常处理不同。什么情况会发生异常?? weak_ptr 解决 share_ptr循环引用的问题,但是怎么知道选释放 引用少的(weak_ptr)那个对象的?? 其实和顺序无关,和 share_ptr 引用的次数有关!  变量作用域结束后,先释放某

C++中四种类型转换是:static_cast, dynamic_cast, const_cast, reinterpret_cast

dynamic_cast 针对的父类和子类之间的转换,对应指针和引用异常处理不同。什么情况会发生异常??


weak_ptr 解决 share_ptr循环引用的问题,但是怎么知道选释放 引用少的(weak_ptr)那个对象的??

其实和顺序无关,和 share_ptr 引用的次数有关!  变量作用域结束后,先释放某对象,对象计数减一,若为0则析构,若异构后另一 share_ptr 计数变为0,则析构。


对于“分配内存”,由于局部静态变量存储在全局存储区,故应在程序执行前,编译时分配内存。

关于编译出的程序包,文件大小包含·分配的内存?



个人感觉函数指针放在这里不太合适(或者说如果我面试被问到我会这么回答)。
C++本身是支持面向对象的编程范式的,那么希望实现多态完全没必要在使用C的struct+函数指针的套路,而可以直接使用虚函数。
假如我们希望把函数作为参数传递也是没有必要的,因为我们有C++的特性:function<()>,也可以作为函数指针的替代品。
我认为学习C++这门语言无需带有太多“语言历史”的顾虑,C++的特性掌握好就足够了。
发表于 2020-05-28 11:03:19回复(1)赞(0)举报
Kirai! :举个例子吧:
```c++
int f(int x) {
return x;
}

int g(int x, function f) {
return 3 + f(x);
}

signed main() {
cout << g(5, f) << endl;
}



const  位置  放在成员函数后面 与 不放 算重载?



每一个函数调用都会分配函数栈,在栈内进行函数执行过程。调用前,先把返回地址压栈,然后把当前函数的esp(应该为ebp)指针压栈。
ebp压栈,然后ebp改为当前esp值,此时ebp=esp,表示初始的子函数帧栈其大小为0


新加评论 评论标题: