随笔分类 -  C++

摘要:我经常在代码中使用诸如以下代码来给指针变量赋值: char *buf = NULL; 但是C++11已经摒弃了这种用法。因为这种用法会带来重载解析的麻烦,详见代码: #include <iostream> using namespace std; void foo(char *); void foo 阅读全文
posted @ 2018-05-02 16:44 lichongbin 阅读(244) 评论(0) 推荐(0)
摘要:内存泄漏的地方经常比较隐秘,今天就遇到了一回。问题出在delete (void*)上面,示例代码如下:class Detect {public: Detect() { m_n1 = 0; m_n2 = 0; m_data.resize(10 ,... 阅读全文
posted @ 2015-10-21 16:25 lichongbin 阅读(255) 评论(0) 推荐(0)
摘要:下面由MFC代码中抽取来,以最简便的方式实现了的链表功能:#include #include #include #define AFX_INLINE inline /*__forceinline*/#define ASSERT(f) ((void)0)#define AFX_NOV... 阅读全文
posted @ 2014-09-03 10:53 lichongbin 阅读(953) 评论(0) 推荐(0)
摘要:全局变量会被初始化为0,这是一直以来脑海中的概念。对于全局对象的理解就是,类有构造函数,在构造函数里可以初始化成员变量。我自己写程序也采用这个原则。其实对于全局对象,对象的成员变量也被编译器初始化为0.示例代码:class A{public: int m_value;};A g_a;void ... 阅读全文
posted @ 2014-08-28 17:08 lichongbin 阅读(791) 评论(0) 推荐(0)
摘要:重载操作符、转换函数 阅读全文
posted @ 2014-08-18 10:38 lichongbin 阅读(162) 评论(0) 推荐(0)
摘要:offsetof是求类的成员变量的偏移量,如果成员变量是类定义的第一个变量,那他的偏移量应该是0.但是引入继承之后,就要额外考虑了。下面的代码说明了这个问题:#define AFX_NOVTABLE//#define AFX_NOVTABLE __declspec(novtable)class AF... 阅读全文
posted @ 2014-08-14 16:33 lichongbin 阅读(445) 评论(0) 推荐(0)
摘要:virtual与static不能同时作用于一个函数。根据面向对象的理论,virtual的成员函数是可以变子类覆盖的,是实现多态的重要手段。而static作用的成员函数表示该函数仅属于某个类。下面是实验的代码:class A{ static virtual int Get() { return ... 阅读全文
posted @ 2014-08-13 16:12 lichongbin 阅读(1974) 评论(0) 推荐(0)
摘要:this指针指向的是对象的地址,与对象第一个成员变量的关系是怎样的呢?看下面这个例子:struct CPlex{ CPlex* pNext; void* data() { return this+1; }};int main(int argc, char* argv[]){ CPlex p; voi... 阅读全文
posted @ 2014-08-13 14:04 lichongbin 阅读(234) 评论(0) 推荐(0)
摘要:原文链接:http://hi.baidu.com/baiyw920/item/35384a440b7b71ad61d7b9d6__declspec用于指定所给定类型的实例的与Microsoft相关的存储方式。其它的有关存储方式的修饰符如static与extern等是C和C++语言的ANSI规范,而__declspec是一种扩展属性的定义。扩展属性语法简化并标准化了C和C++语言关于Microsoft的扩展。用法:__declspec ( extended-decl-modifier )extended-decl-modifier参数如下,可同时出现,中间有空格隔开:align (C++)all 阅读全文
posted @ 2013-10-30 16:29 lichongbin 阅读(318) 评论(0) 推荐(0)
摘要:#include <iostream>using namespace std;template <class T>struct plus{ T operator()(const T& x, const T& y) const { return x + y; }};template <class T>struct minus{ T operator()(const T& x, const T& y) const { return x - y; }};int main(){ plus<int> plusobj; min 阅读全文
posted @ 2012-08-31 15:36 lichongbin 阅读(145) 评论(0) 推荐(0)
摘要:#include <iostream>#include <new>using namespace std;const int chunk = 16;class Foo{public: int val() { return __val; } Foo() { __val = 0; }private: int __val;};char *buf = new char[sizeof(Foo) * chunk];int main(int argc, char* argv[]){ Foo *pb = new (buf)Foo; if (pb->val() ... 阅读全文
posted @ 2012-08-30 15:50 lichongbin 阅读(131) 评论(0) 推荐(0)
摘要:对于动态分配常量对象,我平时写代码从来没有用过。今天看C++书时注意到了。在VC6.0里测试了一下,结果VC6.0不支持。const int *pic = new const int(1000);注意:1、常量对象的动态分配和普通变量一样,可以动态释放。2、常量对象只能是基本数据类型,并在分配时,必须赋值。 阅读全文
posted @ 2012-08-29 15:46 lichongbin 阅读(186) 评论(0) 推荐(0)