随笔分类 - C++
摘要:我经常在代码中使用诸如以下代码来给指针变量赋值: char *buf = NULL; 但是C++11已经摒弃了这种用法。因为这种用法会带来重载解析的麻烦,详见代码: #include <iostream> using namespace std; void foo(char *); void foo
阅读全文
摘要:内存泄漏的地方经常比较隐秘,今天就遇到了一回。问题出在delete (void*)上面,示例代码如下:class Detect {public: Detect() { m_n1 = 0; m_n2 = 0; m_data.resize(10 ,...
阅读全文
摘要:下面由MFC代码中抽取来,以最简便的方式实现了的链表功能:#include #include #include #define AFX_INLINE inline /*__forceinline*/#define ASSERT(f) ((void)0)#define AFX_NOV...
阅读全文
摘要:全局变量会被初始化为0,这是一直以来脑海中的概念。对于全局对象的理解就是,类有构造函数,在构造函数里可以初始化成员变量。我自己写程序也采用这个原则。其实对于全局对象,对象的成员变量也被编译器初始化为0.示例代码:class A{public: int m_value;};A g_a;void ...
阅读全文
摘要:offsetof是求类的成员变量的偏移量,如果成员变量是类定义的第一个变量,那他的偏移量应该是0.但是引入继承之后,就要额外考虑了。下面的代码说明了这个问题:#define AFX_NOVTABLE//#define AFX_NOVTABLE __declspec(novtable)class AF...
阅读全文
摘要:virtual与static不能同时作用于一个函数。根据面向对象的理论,virtual的成员函数是可以变子类覆盖的,是实现多态的重要手段。而static作用的成员函数表示该函数仅属于某个类。下面是实验的代码:class A{ static virtual int Get() { return ...
阅读全文
摘要:this指针指向的是对象的地址,与对象第一个成员变量的关系是怎样的呢?看下面这个例子:struct CPlex{ CPlex* pNext; void* data() { return this+1; }};int main(int argc, char* argv[]){ CPlex p; voi...
阅读全文
摘要:原文链接: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
阅读全文
摘要:#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
阅读全文
摘要:#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() ...
阅读全文
摘要:对于动态分配常量对象,我平时写代码从来没有用过。今天看C++书时注意到了。在VC6.0里测试了一下,结果VC6.0不支持。const int *pic = new const int(1000);注意:1、常量对象的动态分配和普通变量一样,可以动态释放。2、常量对象只能是基本数据类型,并在分配时,必须赋值。
阅读全文

浙公网安备 33010602011771号