随笔 - 20, 文章 - 0, 评论 - 5, 引用 - 0
数据加载中……

定义智能指针类


1 // autoPtr.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include <iostream> 6 using namespace std; 7 class HasPtr 8 { 9 public: 10 HasPtr(int *p,int i):ptr(p),val(i) 11 { 12 13 } 14 int *get_ptr()const 15 { 16 return ptr; 17 } 18 int get_int()const 19 { 20 return val; 21 } 22 void set_ptr(int *p) 23 { 24 ptr = p; 25 } 26 void set_int(int i) 27 { 28 val = i; 29 } 30 int get_ptr_val()const 31 { 32 return *ptr; 33 } 34 void set_ptr_val(int val)const 35 { 36 *ptr = val; 37 } 38 private: 39 int *ptr; 40 int val; 41 }; 42 43 44 int _tmain(int argc, _TCHAR* argv[]) 45 { 46 int obj = 0; 47 //默认 复制 赋值 指针共享同一对象 48 HasPtr ptr1(&obj,42); 49 HasPtr ptr2(ptr1); 50 ptr1.set_int(0); //只改变ptr1中的val 51 cout<<ptr2.get_int()<<endl; //输出的仍然是42 52 cout<<ptr1.get_int()<<endl; //输出的是 0 53 ptr1.set_ptr_val(44); //设置了ptr1跟ptr2指针 同时指定的对象 54 cout<<ptr2.get_ptr_val()<<endl; //输出44 55 //出现悬指针 56 int *ip = new int(42); //动态分配 并初始化为42 57 HasPtr ptr(ip,10); //ptr 指针指跟 指针ip 指向同一 对象 58 delete ip; 59 ptr.set_ptr_val(12); //指针所指的对象都释放了.... 60 cout<<ptr.get_ptr_val()<<endl; //仍然能输出??? 61 return 0; 62 } 63
 1 //保存指针和使用计数,每个HasPtr对象指向一个U_Ptr对象,使用计数将跟踪指向每个U_Ptr对象的HasPtr对象
 2 class U_Ptr
 3 {
 4     //HasPtr 成员可以访问 U_Ptr成员
 5     friend class HasPtrN;
 6     int *ip;
 7     size_t use;
 8     U_Ptr(int *p):ip(p),use(1){}
 9     ~U_Ptr(){delete ip;}
10 };
11 
12 //新的HasPtr类
13 class HasPtrN
14 {
15 public:
16     HasPtrN(int *p,int i):ptr(new U_Ptr(p)),val(i){}
17     HasPtrN(const HasPtrN &orig):
18     ptr(orig.ptr),val(orig.val)
19     {
20         ++ptr->use;
21     }
22     HasPtrN& operator=(const HasPtrN&rhs)
23     {
24         ++rhs.ptr->use;
25         if (0 == --ptr->use)
26         {
27             delete ptr;
28         }
29         ptr = rhs.ptr;
30         val = rhs.val;
31         return *this;
32     }
33     ~HasPtrN()
34     {
35         if(0 == --ptr->use)
36             delete ptr;
37     }
38     int *get_ptr()const
39     {
40         return ptr->ip;
41     }
42     int get_int()const
43     {
44         return val;
45     }
46     void set_ptr(int *p)
47     {
48         ptr->ip = p;
49     }
50     void set_int(int i)
51     {
52         val = i;
53     }
54     int get_ptr_val()const
55     {
56         return *ptr->ip;
57     }
58     void set_ptr_val(int i)
59     {
60         *ptr->ip = i;
61     }
62 private:
63     U_Ptr *ptr;
64     int val;
65 
66 };
 1 class HasPtrValue
 2 {
 3 public:
 4     HasPtrValue(const int &p,int i):ptr(new int(p)),val(i){}
 5     HasPtrValue(const HasPtrValue &orig):
 6     ptr(new int(*orig.ptr)),val(orig.val){}
 7     HasPtrValue & operator = (const HasPtrValue&rhs)
 8     {
 9         *ptr = *rhs.ptr;
10         val = rhs.val;
11         return *this;
12     }
13     ~HasPtrValue(){}
14     int get_ptr_val()const
15     {
16         return *ptr;
17     }
18     int get_int()const
19     {
20         return val;
21     }
22     int *get_ptr()const
23     {
24         return ptr;
25     }
26     void set_ptr_val(int p)const
27     {
28         *ptr = p;
29     }
30 private:
31     int *ptr;
32     int val;
33 
34 };

posted @ 2010-09-07 16:16 Eping 阅读(351) | 评论 (0)编辑 收藏

Visual Studio 2008中使用LibCurl

首先下载LibCurl 目前最新版为 7.21.1  下载链接:http://curl.haxx.se/download.html
解压后打开vc6curl.dsw 用高版本VS 打开会自动转为相应的工程文件vc6curl.sln 成功编译后可在lib\DLL-Debug目录下找到 静态库libcurld_imp.lib 和动态库libcurld.dll,待会可以拷贝到我们的应用程序目录下,同时可以将curl-7.21.1\include\curl目录拷贝到我们的工程目录下,也可以在VS工程里面指定引用目录。完成这些工作后在VS项目属性页中设置要包含的静态库。步骤:项目——>项目属性——>配置属性——>链接器——>命令行   在附加选项中 输入lib/libcurld_imp.lib 依具体情况而
#include "stdafx.h" #include "include/curl/curl.h" #include <stdio.h> int _tmain(int argc, _TCHAR* argv[]) { CURL *curl; CURLcode res; curl = curl_easy_init(); if (curl) { curl_easy_setopt(curl,CURLOPT_URL,"http://www.eping.net"); res = curl_easy_perform(curl); curl_easy_cleanup(curl); } return 0; }

posted @ 2010-09-06 17:32 Eping 阅读(2171) | 评论 (3)编辑 收藏

Linux用户管理(涉及命令及配置文件)

     摘要: 一、用户管理概念1.用户管理的范围用户帐号管理组帐号管理用户/组帐号的权限管理用户帐号的环境设置2.Linux系统用户管理特点多用户平台(ALT+F1--12)单用户模式中无需用户管理方法有两种:命令、图形工具、二、用户帐号的管理1.用户帐号的分类超级用户(UID=0):具有一切系统操作权限普通用户(UID=500—MAXUID默认值60000):操作权限受到限制伪用户(UID=1—499):限制...  阅读全文

posted @ 2010-09-04 00:02 Eping 阅读(226) | 评论 (0)编辑 收藏

PS命令常用用法

 1)ps a 显示现行终端机下的所有程序,包括其他用户的程序。

  2)ps -A 显示所有程序。

  3)ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。

  4)ps -e 此参数的效果和指定"A"参数相同。

  5)ps e 列出程序时,显示每个程序所使用的环境变量。

  6)ps f 用ASCII字符显示树状结构,表达程序间的相互关系。

  7)ps -H 显示树状结构,表示程序间的相互关系。

  8)ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。

  9)ps s 采用程序信号的格式显示程序状况。

  10)ps S 列出程序时,包括已中断的子程序资料。

  11)ps -t<终端机编号>

  指定终端机编号,并列出属于该终端机的程序的状况。

  12)ps u

  以用户为主的格式来显示程序状况。

  13)ps x

  显示所有程序,不以终端机来区分。

  最常用的方法是ps -aux,然后再利用一个管道符号导向到grep去查找特定的进程,然后再对特定的进程进行操作。

posted @ 2010-09-03 23:32 Eping 阅读(243) | 评论 (0)编辑 收藏

C语言指针运算符

 1 #include <stdio.h>
 2 
 3 int _tmain(int argc, _TCHAR* argv[])
 4 {
 5     int x[] = {102030};
 6     int *px = x;
 7 
 8     printf("%d,"++*px); //同优先级    自右向左结合  相当于++(*px)    
 9     printf("%d\n"*px);  //自加了1    
10 
11     px = x;
12     printf("%d,", (*px)++);
13     printf("%d\n"*px);
14 
15     px = x;
16     printf("%d,"*px++);
17     printf("%d\n"*px);
18 
19     px = x;
20     printf("%d,"*++px);
21     printf("%d\n"*px);
22     return 0;
23 }


答案:  printf("%d,"++*px);   //同优先级    自右向左结合  相当于++(*px)   所以结果为11  
        printf("%d\n"*px);     //上面自加了1     所以结果为 11 

printf("%d,", (*px)++);   // ++ 在后面 优先级 比放前面要高 且为自左向右结合方式    结果仍为 11
printf("%d\n"*px);    // 结果为12

printf("%d,"*px++);   //++在后面 优先级高于 * 相当于 *(px++)   指针加 1  加了 4个字节 指向了 数组的第二个元素 即 20 但这是下一次输出的结果 本次输出依然为12
printf("%d\n"*px);   //输出20

printf("%d,"*++px);  //优先级 相同  自右向左结合    相当于*(++px) 开始px = x 指向了第一个元素    指针+1后指向数组中第二个元素 20
printf("%d\n"*px); //只是输出而已

posted @ 2010-09-03 19:01 Eping 阅读(326) | 评论 (0)编辑 收藏

C++运算符优先级

     摘要: http://www.cppreference.com/wiki/operator_precedence 小结:不能重载运算符 ::    .    .*      ? :   PrecedenceOperatorDescriptionExampleOverloadableAssociativity...  阅读全文

posted @ 2010-09-03 18:19 Eping 阅读(278) | 评论 (0)编辑 收藏

不经意的内存泄露

 1 #include <iostream>
 2 using namespace std;
 3 
 4 int _tmain(int argc, _TCHAR* argv[])
 5 {
 6     char *str = NULL;
 7     str = new char[6];
 8     strcpy(str,"hello");
 9     delete str;
10     if (str != NULL)
11     {
12         strcpy(str,"world");
13         cout<<str<<endl;
14     }
15     return 0;
16 }
输入结果:world
delete 只是把把申请的那段内存释放掉,但是这个指针是没有改变的,所以delete掉后,你的str的值还是指向那段内存!

posted @ 2010-09-02 00:46 Eping 阅读(241) | 评论 (0)编辑 收藏

char*&和char*

 1 #include <iostream>
 2 using namespace std;
 3 struct point
 4 {
 5     int x;
 6     int y;
 7 };
 8 
 9 void changenum1(point *&pnum)
10 {
11     pnum = new point;
12     pnum->= 4;
13 }
14 
15 void changenum2(point *pnum)
16 {
17     pnum = new point;
18     pnum->= 4;
19 }
20 
21 
22 
23 
24 void test1()
25 {
26     point *num = new point;
27     num->= 10;
28     changenum1(num);
29     std::cout<<"指针引用"<<num->x<<endl;
30 }
31 
32 void test2()
33 {
34     point *num = new point;
35     num->= 10;
36     changenum2(num);
37     std::cout<<"指针"<<num->x<<endl;
38 }
39 
40 
41 int _tmain(int argc, _TCHAR* argv[])
42 {
43     test1();
44     test2();
45 
46     return 0;
47 }
48 
运行结果是:
4
10
解释:
char *&是指针引用
cha *是指针
当用指针引用作为形参的时候,改变形参的指针,同时实参的指针也改变了。
当用指针做形参的时候,改变形参的指针,实参的指针不改变,当改变指针所指向的内容的时候,会同时改变。

posted @ 2010-09-01 23:47 Eping 阅读(1099) | 评论 (0)编辑 收藏

【作品】SWF文件Tag解析

下载链接http://files.cnblogs.com/eping/swfParserexe.rar

posted @ 2010-09-01 10:31 Eping 阅读(505) | 评论 (0)编辑 收藏

取一字节里的第n位

     摘要:   阅读全文

posted @ 2010-08-11 17:36 Eping 阅读(775) | 评论 (2)编辑 收藏

仅列出标题
共2页: 1 2