析构函数与this指针】的更多相关文章

复制构造函数形如className :: className(const &)   /   className :: className(const className &)后者能以常量对象作为参数如不写复制构造函数,则编译器默认提供,为了完成对象的复制功能 它起作用有三个工作环境: 1.一个对象初始化另一个同类的对象 Simple c2(c1); Simple c2 = c1;//初始化 2.如果某函数有一个参数是类的一个对象,那么该函数被调用时,类的复制构造函数被调用 Simple A…
二.析构函数 1.知识点介绍 析构函数和构造函数一样,也是一种特殊的函数,主要的作用是在对象结束生命周期时,系统自动调用析构函数,来做一些清理工作,比如在对象中有申请内存,那么是需要自己去释放内存的,这个释放内存的操作就可以写在析构函数中,在对象死亡的时候自动调用析构函数释放内存,那么这种就不需要担心忘记释放内存了. 2.析构函数的定义 1.函数名与类名相同,在前面加上一个~ ​ ~Student(){} 2.没有返回值类型和返回值,也没有参数 3.如果类中没有自己写析构函数,那么系统将会给出一…
#include<iostream> using namespace std; // 定义仅由HasPtr类使用的U_Ptr类,用于封装使用计数和相关指针 // 这个类的所有成员都是private,我们不希望普通用户使用U_Ptr类,所以它没有任何public成员 // 将HasPtr类设置为友元,使其成员可以访问U_Ptr的成员 class U_Ptr { friend class HasPtr; int *ip; size_t use; U_Ptr() { cout << &q…
auto_ptr auto_ptr是当前C++标准库中提供的一种智能指针. auto_ptr在构造时获取某个对象的所有去(ownership),在析构时释放该对象.我们可以这样使用auto_ptr来提高代码安全性: ); auto_ptr<int> ap(p); 从此我们不必关心应该何时释放p,也不必担心发生异常会有内存泄漏,这是因为auto_ptr的析构函数会执行指针的释放,而析构函数会在ap除了作用域以后执行. auto_ptr的出现,主要是为了解决“被异常抛出时发生资源泄漏”的问题.即如…
转载请标明出处,原文地址:http://blog.csdn.net/hackbuteer1/article/details/7561235 智能指针(smart pointer)是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保自动正确的销毁动态分配的对象,防止内存泄露.它的一种通用实现技术是使用引用计数(reference count).智能指针类将一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象共享同一指针.每次创建类的新对象时,初始化指针并将引用计数置为1:当对象作…
内存管理 1)正确得到: 正确调用内存分配和释放程序; 2)有效使用: 写特定版本的内存分配和释放程序; C中用mallco分配的内存没有用free返回, 就会产生内存泄漏, C++中则是new和delete; new和delete是隐式地调用构造和析构函数的, 而且可以在类内和类外自定义new和delete操作符, 这样带来了复杂性; 条款5 对应的new和delete要采用相同的形式 1 2 3 string *stringArray =  new  string[100]; //... d…
转载http://www.cnblogs.com/gnagwang/archive/2010/11/19/1881811.html C++的auto_ptr auto_ptr所做的事情,就是动态分配对象以及当对象不再需要时自动执行清理. 1 构造函数与析构函数      auto_ptr在构造时获取对某个对象的所有权(ownership),在析构时释放该对象.我们可以这样使用auto_ptr来提高代码安全性: int* p = new int(0); auto_ptr<int> ap(p);…
复印控制 --管理指针成员 引言: 包括指针的类须要特别注意复制控制.原因是复制指针时.一个带指针成员的指针类 class HasPtr { public: HasPtr(int *p,int i):ptr(p),val(i) {} int *get_ptr() const { return ptr; } int get_val() const { return val; } void set_ptr(int *p) { ptr = p; } void set_val(int i) { val…
首先要明确一点,系统只会自动释放栈内空间,而堆内空间需要用户自己维护. C++中,除了new来的空间存放在堆内,其他均存放在栈中. 当单纯的创建对象的时候,对象存放在栈中,此时在程序块的}后面,系统会自动调用析构函数,释放掉栈空间. 但是,如果创建了指向new来的一块空间的指针的时候,如果在没有显示释放掉new到的堆空间时,系统是不会自动调用析构函数去释放栈空间中的指针的. 示例代码如下 #pragma once#include <iostream>using namespace std;cl…
一.赋值操作符 类定义了该类型对象赋值时会发生什么.与拷贝构造函数一样,如果类没有定义自己的赋值操作符,编译器会合成一个. 1.重载操作符的简单介绍 重载操作符是一些函数,其名字为operator后跟着所定义的操作符的符号,通过定义名为operator=的函数,我们可以对赋值进行定义.操作符函数的形参表必须具有与该操作数数目相同的形参(如果操作符是一个成员,则包括隐式this形参).赋值是二元操作符,对应的两个形参,第一个形参为左操作数,第二个形参为右操作数. 注意: (1)当操作符为成员函数时…