<!--[if gte mso 9]> Normal 0 7.8 pt 0 2 false false false MicrosoftInternetExplorer4 <![endif]--><!--[if gte mso 9]> <![endif]-->
C++是一种广泛使用的语言,也曾有兴趣略作研究。因为最近一段时间估计不会用它进行开发了,静下心来,谈谈我对它的理解或是发现。
(1) 引子
本文谈一谈C++中的隐式计数。隐式计数是一个计数器,因为他的储存空间没有显示的体现在程序代码中,故称之为“隐式”,而“计数”是说该存储空间的功能。这么一说,你首先想到的可能是C++中的new []和delete []操作符,不错,用new分配一个数组时,正是使用了“隐式计数”,才使得delete该数组指针时,能够获取到数组元素的个数,请看下面的代码,或许你并不陌生:
struct Test
{
Test() { cout << "Test()" << endl; }
~Test() { cout << "~Test()" << endl; }
};
int main()
{
Test *p = new Test[2];
*((int *)p - 1) = 1;
delete[] p;
return 0;
}
看看输出吧,构造函数被调用两次,析构函数被调用一次(在VC6.0和gcc中均是如此),毫无疑问,(int *)p - 1的位置就是一个计数器,它记录了数组数组元素的个数。
更多精彩点击