摘要:
C++ 用异常使得可以将正常执行代码和出错处理区别开来。 比如一个栈,其为空时,调用其一个pop 函数,接下来怎么办? 栈本身并不知道该如何处理,需要通知给其调用者(caller),因为只有调用者清楚接下来该怎么做。 异常,就提供了一个很好机制。 但是异常需要操作系统,编译器,RTTI的特性支持。下面围绕一个问题 “为什么析构函数不能抛出异常?” 展开C++中异常的实现。Effective C++ 里面有一条”别让异常逃离析构函数“,大意说是Don't do that, otherwise the behavior is undefined. 这里讨论一下从异常的实现角度,讨论一下为什 阅读全文
posted @ 2013-08-18 12:30
问笑
阅读(451)
评论(0)
推荐(0)
摘要:
智 能指针(smart pointer)是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保自动正确的销毁动态分配的对象,防止内存泄露。它的一种通用实现技术是 使用引用计数(reference count)。智能指针类将一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象共享同一指针。每次创建类的新对象时,初始化指针并将引用计数置为1;当对象作为另一对象的副本而创建时,拷贝构造函数拷贝指针并增加与之相应的引用计数;对一个对象进行赋值时,赋值操作符减少左操作数所指对象的引用计数(如果引用计数为减至0,则删除对象),并增加右操作数所指对象的引用计数;调用析构函数时,构造函数减少. 阅读全文
posted @ 2013-08-18 12:12
问笑
阅读(269)
评论(0)
推荐(0)
摘要:
一、简介由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete。程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见。用智能指针便可以有效缓解这类问题,本文主要讲解参见的智能指针的用法。包括:std::auto_ptr、boost::scoped_ptr、 boost::shared_ptr、boost::scoped_array、boost::shared_array、 boost::weak_ptr、boost:: intrusive_ptr。你可能会想,如此多的智能指针就为了解 阅读全文
posted @ 2013-08-18 11:41
问笑
阅读(203)
评论(0)
推荐(0)
摘要:
auto_ptr是当前C++标准库中提供的一种智能指针,或许相对于boost库提供的一系列眼花缭乱的智能指针, 或许相对于Loki中那个无所不包 的智能指针,这个不怎么智能的智能指针难免会黯然失色。诚然,auto_ptr有这样那样的不如人意,以至于程序员必须像使用”裸“指针那样非常小心的使 用它才能保证不出错,以至于它甚至无法适用于同是标准库中的那么多的容器和一些算法,但即使如此,我们仍然不能否认这个小小的auto_ptr所蕴含的价 值与理念。 auto_ptr的出现,主要是为了解决“被异常抛出时发生资源泄漏”的问题。即如果我们让资源在局部对象构造时分配,在局部对象析构时释放。这样即使在函数. 阅读全文
posted @ 2013-08-18 11:25
问笑
阅读(217)
评论(0)
推荐(0)
摘要:
C++中指针申请和释放内存通常采用的方式是new和delete。然而标准C++中还有一个强大的模版类就是auto_ptr,它可以在你不用的时候自动帮你释放内存。下面简单说一下用法。[cpp] view plaincopy用法一:std::auto_ptrm_example(newMyClass());用法二:std::auto_ptrm_example;m_example.reset(newMyClass());用法三(指针的赋值操作):std::auto_ptrm_example1(newMyClass());std::auto_ptrm_example2(newMyClass());m_e 阅读全文
posted @ 2013-08-18 11:17
问笑
阅读(495)
评论(0)
推荐(0)
摘要:
1、每个类必须有一个构造函数,否则没法创建对象; 2、若programer没有提供任何构造函数,则C++提供一个默认的构造函数,该默认构造函数是无参构造函数,它仅负责创建对象,不做任何初始化的工作; 3、只要programer定义了一个构造函数(不管是无参还是有参构造),C++就不再提供默认的默认构造函数。即如果为类定义了一个带参的构造函数,还想要无参构造函数,就必须自己定义; 4、与变量定义类似,在用默认构造函数创建对象时,如果创建的是全局对象或静态对象,则对象的位模式全为0,否则,对象值是随机的。 注:2所述,C++在某些情况下会提供默认构造函数,但在某些情况下并不会自动调用。 实事上,当 阅读全文
posted @ 2013-08-18 11:07
问笑
阅读(733)
评论(0)
推荐(0)
摘要:
代码审核文件 plugins\phpdisk_client\passport.php1234567891011121314151617181920$str = $_SERVER['QUERY_STRING'];if($str){parse_str(base64_decode($str));// 触发函数}else{exit('Error Param');}/*$username = trim(gpc('username','G',''));$password = trim(gpc('password' 阅读全文
posted @ 2013-08-18 09:45
问笑
阅读(464)
评论(0)
推荐(0)
摘要:
#include "stdafx.h"#include "stdio.h"/* 冒泡排序日期:2013月8月18IDE:VC6.0*/void Sort(int arr[],int n){ int tmp; for(int i=0; i<n; i++) { for(int j=1; j<n-i; j++) { if ( arr[j] < arr[j-1] ) { tmp = arr[j-1]; arr[j-1] = arr[j]; ... 阅读全文
posted @ 2013-08-18 09:12
问笑
阅读(134)
评论(0)
推荐(0)
浙公网安备 33010602011771号