<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[d04421024的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/d04421024</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; d04421024]]></copyright><item><title><![CDATA[为什么C++中千万不要返回局部对象或变量的引用和指针]]></title><link>https://blog.youkuaiyun.com/d04421024/article/details/7317456</link><guid>https://blog.youkuaiyun.com/d04421024/article/details/7317456</guid><author>d04421024</author><pubDate>Sun, 04 Mar 2012 11:30:56 +0800</pubDate><description><![CDATA[大家都知道一个常识：“C++中千万不要返回局部对象或变量的引用和指针”。

既然所有C++权威的书上都要求“一定不要返回局部对象或变量的引用和指针”，那为什么C++编译器不从语法上直接禁掉这种用法。如果只是建议的话，那么“返回局部对象或变量的引用和指针”是否有用武之地呢？(从理论上来讲，我认为这种做法似乎总是错误的，原因大家都知道。)
例1：
class CComplex
{
publ]]></description><category></category></item><item><title><![CDATA[wxWidgets菜单上显示图标]]></title><link>https://blog.youkuaiyun.com/d04421024/article/details/6281097</link><guid>https://blog.youkuaiyun.com/d04421024/article/details/6281097</guid><author>d04421024</author><pubDate>Sun, 27 Mar 2011 09:38:00 +0800</pubDate><description><![CDATA[<br /> <br />wxMenu* file_menu =newwxMenu();<br />wxMenuItem* pMenuItem =new wxMenuItem(file_menu, wxID_EXIT, wxT("退出(&X)/tCtrl-x"), wxT("退出本系统"));<br /> <br />wxBitmap bitmap; <br />bitmap.LoadFile(wxT("123.png"), wxBITMAP_TYPE_PNG);<br /> <br />pMenuItem]]></description><category></category></item><item><title><![CDATA[windows内存管理]]></title><link>https://blog.youkuaiyun.com/d04421024/article/details/5948892</link><guid>https://blog.youkuaiyun.com/d04421024/article/details/5948892</guid><author>d04421024</author><pubDate>Mon, 18 Oct 2010 15:28:00 +0800</pubDate><description><![CDATA[<br />（1）有三种方法：虚拟内存，内存映射文件，内存堆栈。   <br />  虚拟内存是将页文件加载到内存，适用于比较大的对象或结构；<br />  内存映射文件是将磁盘上文件加载到内存，适用于大文件和单机的进程间内存共享；<br />  堆栈就是动态的分配内存，适用于小对象的创建。   <br />  这些在windows核心编程中都描述得很详细的。 <br /> （2） 当进程要读自己的虚拟地址空间中的数据时   <br />  if(数据在物理内存中)   <br />  {   <br />]]></description><category></category></item><item><title><![CDATA[尽量使用初始化而不要在构造函数里赋值]]></title><link>https://blog.youkuaiyun.com/d04421024/article/details/5948108</link><guid>https://blog.youkuaiyun.com/d04421024/article/details/5948108</guid><author>d04421024</author><pubDate>Mon, 18 Oct 2010 10:11:00 +0800</pubDate><description><![CDATA[尽量使用初始化而不要在构造函数里赋值<br /> <br />看这样一个模板，它生成的类使得一个名字和一个t类型的对象的指针关联起来。<br />template<class t><br />class namedptr {<br />public:<br />  namedptr(const string& initname, t *initptr);<br />  ...<br />private:<br />  string name;<br />  t *ptr;<br />};<br />（因为有]]></description><category></category></item><item><title><![CDATA[把类的析构函数写成虚函数的用意]]></title><link>https://blog.youkuaiyun.com/d04421024/article/details/5939992</link><guid>https://blog.youkuaiyun.com/d04421024/article/details/5939992</guid><author>d04421024</author><pubDate>Thu, 14 Oct 2010 09:28:00 +0800</pubDate><description><![CDATA[Cpp代码 
#include    
class Base    
{    
public:    
Base() { mPtr = new int; }    
~Base() { delete mPtr; cout
class Base 
{ 
public: 
Base() { mPtr = new int; } 
~Base() { delete mPtr; cout]]></description><category></category></item><item><title><![CDATA[常对象和常函数的关系 const]]></title><link>https://blog.youkuaiyun.com/d04421024/article/details/5936525</link><guid>https://blog.youkuaiyun.com/d04421024/article/details/5936525</guid><author>d04421024</author><pubDate>Tue, 12 Oct 2010 19:11:00 +0800</pubDate><description><![CDATA[（1） 常对象用const修饰的对象叫对象常量，其格式如下：〈类名〉const 〈对象名〉 或者 const 〈类名〉〈对象名〉声明为常对象的同时必须被初始化，并从此不能改写对象的数据成员。 例：分析下列错误的地方，说明理由；#includeclass Point{ int x, y;public:Point(int a, int b) { x=a; y=b;}Void MovePoint( int a, int b){ x+=a; y+=b;}Void print(){ cout};void main( ]]></description><category></category></item><item><title><![CDATA[sprintf、strcpy 及 memcpy 函数]]></title><link>https://blog.youkuaiyun.com/d04421024/article/details/5911938</link><guid>https://blog.youkuaiyun.com/d04421024/article/details/5911938</guid><author>d04421024</author><pubDate>Tue, 28 Sep 2010 14:23:00 +0800</pubDate><description><![CDATA[<br />这些函数的区别在于 实现功能 以及 操作对象 不同。<br />strcpy 函数操作的对象是 字符串，完成 从 源字符串 到 目的字符串 的 拷贝 功能。<br />sprintf 函数操作的对象 不限于字符串：虽然目的对象是字符串，但是源对象可以是字符串、也可以是任意基本类型的数据。这个函数主要用来实现 （字符串或基本数据类型）向 字符串 的转换 功能。如果源对象是字符串，并且指定 %s 格式符，也可实现字符串拷贝功能。<br />memcpy 函数顾名思义就是 内存拷贝，实现 将一个 内存]]></description><category></category></item><item><title><![CDATA[#pragma once与 #ifndef的区别]]></title><link>https://blog.youkuaiyun.com/d04421024/article/details/5871405</link><guid>https://blog.youkuaiyun.com/d04421024/article/details/5871405</guid><author>d04421024</author><pubDate>Wed, 08 Sep 2010 17:04:00 +0800</pubDate><description><![CDATA[<br />为了避免同一个文件被include多次<br /><br />1   #ifndef方式<br />2   #pragma once方式<br /><br />在能够支持这两种方式的编译器上，二者并没有太大的区别，但是两者仍然还是有一些细微的区别。<br />    方式一：<br />    #ifndef __SOMEFILE_H__<br />    #define __SOMEFILE_H__<br />    ... ... // 一些声明语句<br />    #endif<br /]]></description><category></category></item><item><title><![CDATA[深入C++的new]]></title><link>https://blog.youkuaiyun.com/d04421024/article/details/5699718</link><guid>https://blog.youkuaiyun.com/d04421024/article/details/5699718</guid><author>d04421024</author><pubDate>Mon, 28 Jun 2010 16:47:00 +0800</pubDate><description><![CDATA[<br />“new”是C++的一个关键字，同时也是操作符。关于new的话题非常多，因为它确实比较复杂，也非常神秘，下面我将把我了解到的与new有关的内容做一个总结。<br />new的过程<br />当我们使用关键字new在堆上动态创建一个对象时，它实际上做了三件事：获得一块内存空间、调用构造函数、返回正确的指针。当然，如果我们创建的是简单类型的变量，那么第二步会被省略。假如我们定义了如下一个类A：<br />class A<br />{<br />   int i;<br />public:<br />]]></description><category></category></item><item><title><![CDATA[程序在内存中运行的奥秘]]></title><link>https://blog.youkuaiyun.com/d04421024/article/details/5694312</link><guid>https://blog.youkuaiyun.com/d04421024/article/details/5694312</guid><author>d04421024</author><pubDate>Fri, 25 Jun 2010 16:12:00 +0800</pubDate><description><![CDATA[<br />内存管理是操作系统的核心功能，无论对于开发者还是系统管理员内存管理的重要性都是不言而喻的。我会在接下来的几篇文章通过计算机的实际运行过程谈谈内存管理，当然在必要的时候我也会从底层原理去阐释这个问题。我们提到的概念是不局限于平台特性的通用概念，不过为了阐述这些概念我们选取的实例大多来源于Linux和基于x86架构的32位Windows操作系统。这篇文章，我们首先来看看程序是如何使用内存的。<br /> <br />　　多任务操作系统中，每一个进程都有它自己的内存“沙盒”。所谓“沙盒”，是指虚拟地址]]></description><category></category></item><item><title><![CDATA[Boost线程简介(转自Boost中文站)]]></title><link>https://blog.youkuaiyun.com/d04421024/article/details/5694252</link><guid>https://blog.youkuaiyun.com/d04421024/article/details/5694252</guid><author>d04421024</author><pubDate>Fri, 25 Jun 2010 15:56:00 +0800</pubDate><description><![CDATA[Boost线程简介(转自Boost中文站)<br />C++ Boost Thread 编程指南0 前言1 创建线程2 互斥体3 条件变量 4 线程局部存储5 仅运行一次的例程6 Boost线程库的未来 7 参考资料：0 前言标准C++线程即将到来。CUJ预言它将衍生自Boost线程库，现在就由Bill带领我们探索一下Boost线程库。
<br />就在几年前，用多线程执行程序还是一件非比寻常的事。然而今天互联网应用服务程序普遍使用多线程来提高与多客户链接时的效率；为了达到最大的吞吐量，事务 服务器在单独]]></description><category></category></item><item><title><![CDATA[vector类中的构造函数]]></title><link>https://blog.youkuaiyun.com/d04421024/article/details/5688434</link><guid>https://blog.youkuaiyun.com/d04421024/article/details/5688434</guid><author>d04421024</author><pubDate>Wed, 23 Jun 2010 10:10:00 +0800</pubDate><description><![CDATA[<br />向量容器使用动态数组存储、管理对象。因为数组是一个随机访问数据结构，所以可以随机访问向量中的元素。在数组中间或是开始处插入一个元素是费时的，特别是在数组非常大的时候更是如此。然而在数组末端插入元素却很快。<br />实现向量容器的类名是vector（容器是类模板）。包含vector类的头文件名是vector。所以，如果要在程序里使用向量容器，就要在程序中包含下面语句：<br />#include <vector><br />此外，在定义向量类型对象时，必须指定该对象的类型，因为vector类是一]]></description><category></category></item><item><title><![CDATA[cin]]></title><link>https://blog.youkuaiyun.com/d04421024/article/details/5664727</link><guid>https://blog.youkuaiyun.com/d04421024/article/details/5664727</guid><author>d04421024</author><pubDate>Fri, 11 Jun 2010 17:19:00 +0800</pubDate><description><![CDATA[<br />很多初学者都认为cin函数是一个很简单的函数，其实不然！cin函数有很多需要了解的知识（比如：cin的返回值是什么，cin提供了哪些成员函数且分别是什么作用，如cin.clear(), cin.ignore(), cin.fail(), cin.good()等等），如果没有很好的掌握，在使用的时候很可能会出问题却不知其原因！而且很多人也确确实实遇到过不少问题，以下是几个简单的例子：<br />程序1：<br />#include <iostream><br />using namespace s]]></description><category></category></item><item><title><![CDATA[cout格式输出的使用]]></title><link>https://blog.youkuaiyun.com/d04421024/article/details/5664286</link><guid>https://blog.youkuaiyun.com/d04421024/article/details/5664286</guid><author>d04421024</author><pubDate>Fri, 11 Jun 2010 15:16:00 +0800</pubDate><description><![CDATA[<br />控制符是在头文件iomanip.h中定义的对象。 使用前必须把iomanip.h包含进来<br /> 1. I/O的书写格式<br />　 I/0流是输入或输出的一系列字节，当程序需要在屏幕上显示输出时，可以使用插入操 作符“<<”向cout输出流中插入字符。例如：<br />　　　cout<<”This is a program./n"；<br />　　当程序需要执行键盘输入时，可以使用抽取操作符“>>”从cin输人流中抽取字符。例如：<br />　　　int myAge；<br />　　　c]]></description><category></category></item><item><title><![CDATA[在C++中explicit关键字]]></title><link>https://blog.youkuaiyun.com/d04421024/article/details/5656092</link><guid>https://blog.youkuaiyun.com/d04421024/article/details/5656092</guid><author>d04421024</author><pubDate>Tue, 08 Jun 2010 16:35:00 +0800</pubDate><description><![CDATA[<br />在C++中explicit作用:<br />explicit关键字用来修饰类的构造函数，被修饰的构造函数的类，不能发生相应的隐式类型转换，只能以显示的方式进行类型转换。<br />explicit使用注意事项:<br />*explicit 关键字只能用于类内部的构造函数声明上。<br />*explicit 关键字作用于单个参数的构造函数。<br />* 在C++中，explicit关键字用来修饰类的构造函数，被修饰的构造函数的类，不能发生相应的隐式类型转换<br /> <br />如下面所示]]></description><category></category></item><item><title><![CDATA[sizeof（struct）的内存分配]]></title><link>https://blog.youkuaiyun.com/d04421024/article/details/5644945</link><guid>https://blog.youkuaiyun.com/d04421024/article/details/5644945</guid><author>d04421024</author><pubDate>Thu, 03 Jun 2010 15:41:00 +0800</pubDate><description><![CDATA[<br />请看下面的结构：<br />   struct MyStruct   {     double dda1;   char dda;       int type;   };<br />对结构MyStruct采用sizeof会出现什么结果呢？sizeof(MyStruct)为多少呢？<br />也许你会这样求：sizeof(MyStruct)=sizeof(double)+sizeof(char)+sizeof(int)=13<br />但是当在VC中测试上面结构的大小时，你会发现sizeof(M]]></description><category></category></item><item><title><![CDATA[strlen和sizeof]]></title><link>https://blog.youkuaiyun.com/d04421024/article/details/5644696</link><guid>https://blog.youkuaiyun.com/d04421024/article/details/5644696</guid><author>d04421024</author><pubDate>Thu, 03 Jun 2010 14:23:00 +0800</pubDate><description><![CDATA[<br />1.sizeof返回值类型为size_t，在<stddef.h>中有定义：typedef unsigned int size_t。该类型保证能容纳实现所建立的最大对象的字节大小。 <br />2.sizeof是算符，strlen是函数。 <br />3.sizeof可以用类型做参数，strlen只能用char*做参数，且必须是以''/0''结尾的。 <br />sizeof还可以用函数做参数，比如： <br />short f(); <br />printf("%d/n", sizeof(f()]]></description><category></category></item><item><title><![CDATA[wxWidgets 在windows下加载图标资源]]></title><link>https://blog.youkuaiyun.com/d04421024/article/details/5623594</link><guid>https://blog.youkuaiyun.com/d04421024/article/details/5623594</guid><author>d04421024</author><pubDate>Tue, 25 May 2010 19:30:00 +0800</pubDate><description><![CDATA[将XX.ico拷贝到项目根目录，新建resource.rc文件，文件手动输入下列内容：myicon ICON   "XX.ico"#include 在程序顶层Frame中写出如下代码：SetIcon(wxIcon(wxT("myicon")));    如果出现错误：CVTRES : fatal error CVT1100: 重复的资源。type:MANIFEST, name:1, l]]></description><category></category></item><item><title><![CDATA[C++中的文件输入/输出]]></title><link>https://blog.youkuaiyun.com/d04421024/article/details/5606626</link><guid>https://blog.youkuaiyun.com/d04421024/article/details/5606626</guid><author>d04421024</author><pubDate>Wed, 19 May 2010 10:11:00 +0800</pubDate><description><![CDATA[标题 C++中的文件输入/输出（1）：你的第一个程序 Kusk（翻译） 关键字 C++ 文件 FileI/O 入门 出处 http://www.cpp-home.com/FileIO_tutorial.php  C++中的文件输入/输出(1)原作：Ilia Yordanov, loobian@cpp-home.com 简介本教程将以C++最基本的文件I/O（输出/输]]></description><category></category></item><item><title><![CDATA[C++ sizeof 使用规则及陷阱分析]]></title><link>https://blog.youkuaiyun.com/d04421024/article/details/5599365</link><guid>https://blog.youkuaiyun.com/d04421024/article/details/5599365</guid><author>d04421024</author><pubDate>Mon, 17 May 2010 09:52:00 +0800</pubDate><description><![CDATA[1、什么是sizeof 　　首先看一下sizeof在msdn上的定义： 　　The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value of type s]]></description><category></category></item></channel></rss>