我们在程序运行的过程中,经常出现段错误、内存持续增大等,是C++显式内存管理存在的问题,主要归纳为以下几点:野指针:一些内存单元已经释放,但之前指向它的指针还在使用。重复释放:程序试图释放已经被释放过的内存单元。内存泄漏:没有释放不再使用的内存单元。缓冲区溢出:数组越界。不配对的new[]/dele...
分类:
编程语言 时间:
2014-11-28 20:02:28
阅读次数:
308
c++本身不提供自动内存回收机制,所以每次我们有new一个对象或者数组,我们都是时时刻刻提醒自己要记得去delete new出来的对象,那样岂不是非常烦人?而且就算你记得在析构函数中delete new出来的对象,也同样会造成很多问题,比如一个class里面有个指针,初始化的时候new了一块内存,然后class 有个对象a,再通过class b=a复制一份a,这样其实两个对象分别有一个指针指向ne...
分类:
其他好文 时间:
2014-11-26 19:09:12
阅读次数:
132
动态内存C++中程序用堆来存储动态分配(dynamically allocate)的对象——即那些在程序运行时分配的对象。动态内存的生存期由程序控制,也就是当动态对象不再使用时,我们必须显示的销毁它们。But众所周知(王小波句式),正确的管理动态内存是非常棘手的。如果忘了释放内存,就会导致内存泄漏;...
分类:
其他好文 时间:
2014-11-26 18:47:08
阅读次数:
251
// Test.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include
#include //注意加这个头文件
using namespace std;
class Widdget
{
};
int priority()
{
return 0;
}
/*
下面的函数可能造成内存泄露:
调用的时候如下:...
分类:
编程语言 时间:
2014-11-20 15:20:24
阅读次数:
158
//count_if //c++11vector vecint cnt = count_if(vec.begin(),vec.end(),[](int i){return i >=80;});6.常用的智能指针:a) Boost库提供了scoped_ptr/shared_ptrb) C++11内置了...
分类:
其他好文 时间:
2014-11-19 12:11:38
阅读次数:
160
这一节也比较简单,先假设我们有如下的函数:int foo();void memFoo(shared_ptr pw, int foo);现在假设我们要调用memFoo函数:memFoo(new W, foo());但是这样写编译是通不过的,我们可以改造为:memFoo(shared_ptr(new W...
分类:
其他好文 时间:
2014-11-17 17:11:22
阅读次数:
97
引言资源管理类是防止资源泄漏的有力武器,但是许多APIs直接指涉资源,除非你发誓永不使用这样的APIs,否则只得绕过资源管理对象(resource-managing objects)直接访问原始资源(raw resources)。例如在条款13中引入了智能指针如auto_ptr或tr1::share...
分类:
其他好文 时间:
2014-11-17 15:39:43
阅读次数:
124
第一节 条款13中讲到“资源取得的时机便是初始化时机”并由此引出“以对象管理资源”的概念。通常情况下使用std中的auto_ptr(智能指针)和tr1::shared_ptr(引数智能指针)作为管理资源的对象。事实上,这种管理方法十分有效。但是,auto_ptr和tr1::shared_ptr只.....
分类:
其他好文 时间:
2014-11-17 15:25:48
阅读次数:
179
看C++ STL一个月了,小结下这个阶段的学习所得;
容器是以class template完成;内存管理师由memory pool完成;算法是由function template完成;仿函数(函数对象)是一种将operation ( )重载了的class template;迭代器是泛型指针,也是种智能指针,将operator++、operator * 等指针习惯行为重载的class t...
分类:
其他好文 时间:
2014-11-16 16:00:02
阅读次数:
209
背景:默认的c++拷贝与赋值构造函数实现的是值拷贝传递。当类的数据成员为指向堆上的指针时,值拷贝会使多个类的指针指向同一块内存。当其中一个类释放这块内存时,会照成其他类的这个指针空悬,从而引来风险。智能指针是用来解决这类问题的方法。它最终的目的是让多份指针安全地指向同一块内存。要做到这一点,这块被指...
分类:
编程语言 时间:
2014-11-09 19:20:37
阅读次数:
172