C++程序员经常问的问题
来源:互联网 发布:java线程优先级大小 编辑:程序博客网 时间:2024/04/30 21:13
要点9、优化成员的排列
一个类的大小可以被下面的方式改变:
struct A
{
bool a;
int b;
bool c;
}; //sizeof (A) == 12
1000
1111
1000
在我的电脑上sizeof (A) 等于12。这个结果可能会让你吃惊,因为A的成员总数是6个字节:1+4+1个字节。那另6字节是哪儿来的?编译器在每个bool成员后面都插入了3个填充字节以保证每个成员都是按4字节排列,以便分界。你可以减少A的大小,通过以下方式:
struct B
{
bool a;
bool c;
int b;
}; // sizeof (B) == 8
1100
1111
这一次,编译器只在成员c后插入了2个字节。因为b占了4个字节,所以就很自然地把它当作一个字的形式排列,而a和c的大小1+1=2,再加上2个字节就刚好按两个字的形式排列B。
要点10、为什么继承一个没有虚析构函数的类是危险的?
一个没有虚析构函数的类意味着不能做为一个基类。如std::string, std::complex, 和 std::vector 都是这样的。为什么继承一个没有虚析构函数的类是危险的?当你公有继承创建一个从基类继承的相关类时,指向新类对象中的指针和引用实际上都指向了起源的对象。因为析构函数不是虚函数,所以当你delete一个这样的类时,C++就不会调用析构函数链。举个例子说明:
class A
{
public:
~A() // 不是虚函数
{
// ...
}
};
class B: public A //错; A没有虚析构函数
{
public:
~B()
{
// ...
}
};
int main()
{
A * p = new B; //看上去是对的
delete p; //错,B的析构函没有被调用
}
要点11、以友元类声明嵌套的类
当你以友元类声明一个嵌套的类时,把友元声明放在嵌套类声明的后面,而不前面。
class A
{
private:
int i;
public:
class B //嵌套类声明在前
{
public:
B(A & a) { a.i=0;};
};
friend class B;//友元类声明
};
如果你把友元类声明放在声明嵌套类的前面,编译器将抛弃友元类后的其它声明。
- C++程序员经常问的问题
- C++程序员经常问的11个问题
- C++程序员经常问的11个问题
- C++程序员经常问的11个问题
- C++程序员经常问的11个问题-
- C++程序员经常问的11个问题-
- C++程序员经常问的11个问题
- C++程序员经常问的11个问题
- C++程序员经常问的11个问题
- C++程序员经常问的11个问题
- C++程序员经常问的11个问题
- C++程序员经常问的11个问题(转载)
- C++程序员经常问的11个问题
- C++程序员经常问的11个问题
- 面试时经常问的c变量定义的问题.
- 经常问到的问题 (FAQ)
- 经常问到的问题 (FAQ)
- 经常问到的问题 (FAQ)
- KNN(k-nearest neighbor algorithm)算法
- 模拟器和能力(capability)检查
- java tomcat与ant的环境变量配置
- Ubuntu键盘映射
- 用户权限javaweb实现
- C++程序员经常问的问题
- 在glassfish中部署使用Inbound JCA 1.5 (by quqi99)
- WinRAR 破解方法详解
- IBM WAS ND 分布式网络环境的理解与集群的实现(转载自乔自忠)
- struts2+jquery 打造无限层次的树
- word 中的邮件合并
- 自动更新程序源码下载(C#.Net)
- 优秀演员李开复博士
- 在WinForm应用程序中实现自动升级