sizeof(一个空类)为什么不是0?
答:空类型的实例不包含任何信息,本应该是0,但是当我们声明该类型的实例的时候,它必须在内存中占有一定的空间,否则无法使用这些实例。
调用构造函数和析构函数秩序要知道函数的地址,这些函数的地址只与类型相关,而与类型的实例无关。
如果把析构函数标记为虚函数呢?
答:会生成虚函数表,并在该类型的每个实例中添加一个指向该虚函数表的指针。32位,4字节 64位,8字节。
class A
{
private:
int value;
public:
A( int n )
{
value = n;
}
//A(A other) //error C++标准不允许复制构造函数传递参数
A( const A & other)
{
value = other.value;
}
void Print()
{
cout << value << endl;
}
};
int main()
{
A a = 10;
A b = a;
b.Print();
system( "pause");
return 0;
}
面试题1:赋值运算符函数
初级程序员:
<pre name="code" class="cpp">CMyString& CMyString ::operator=(const CMyString &str )
{
if (this == &str)
return *this ;
delete[] m_pData;
m_pData = NULL;
m_pData = new char [strlen(str.m_pData) + 1];
strcpy(m_pData, str.m_pData);
return *this ;
}
高级程序员:要考虑异常安全性的解法。(赋值运算符的现代写法)
CMyString& CMyString ::operator=(const CMyString &str )
{
if (this != &str)
{
CMyString strTemp(str );
char* pTemp = strTemp.m_pData;
strTemp.m_pData = m_pData;
m_pData = pTemp;
}
return *this ;
}