C++ static关键字的作用(从elf结构、链接的过程)
答:static
可以修饰全局变量、函数、局部变量,这些符号在加了staitc
后就只能在当前文件可见,其他文件不可用,原因是如函数被static
修饰后,在符号表中,符号的作用域就从g(global)
变为了l(local)
局部变量本身不产生符号,而是通过**(ebp-偏移量)**来访问
从面向对象来说,static
可修饰成员变量、成员方法(不产生this
指针)
构造函数和析构函数能否抛出异常,为什么?
构造函数不能抛出异常,这样对象会创建失败,就不会调用对象的析构函数,造成内存泄漏
析构函数不能抛出异常, 后面代码就无法得到执行,可能造成内存泄漏
建议使用智能指针管理对象
拷贝构造函数为什么传引用而不传值?
假设传值
class Test
{
public:
Test(const Test t);
};
Test t1;
Test t2(t1); // 相当于调用t2.Test(t1) => const Test t(t1) 即t.Test(t1) 会不断的递归调用下去,会直接编译错误
异常机制有什么用?
可以把代码种所有异常抛到统一的地方进行处理!而不是出异常就exit(0)
,解决一些可容忍的错误
注:栈是高地址到低地址生长,第一个整形变量位置 ebp-4