首页 > 代码库 > c++实现list类(第一次用类) —— new对象需delete

c++实现list类(第一次用类) —— new对象需delete

一:起因

(1)拿出自己年初实现的list,第一次用c++类实现list或者说第一次写一个工程上用到的list类,在和如今实现的list对比,心情无比复杂;

(2)说明了一点,我也曾经幼稚过,现在还比较幼稚,但我相信,只要坚持最初梦想的人,终究会走向成熟;

(3)更加详细的比较全的list   请看   STL list类源代码实现  

(4)再次感谢自己能坚持最初的梦,相信你也有一个类似的梦;不要羡慕别人天赋,别人的成功是无法复制的,别人的辉煌是不会重演的;唯有我们自己脚踏实地的走好每一步,播下我们自己梦想的种子,大步向前。

二:详细代码如下:以下是代码和一些个人心得,欢迎大家指点~

(1)LinkList类的简单实现

struct Node
{
    int data;
    Node *next;
};
class LinkedList
{
    public:
        LinkedList(const int &n);// n 链表长度
        LinkedList(const LinkedList &aplist);
        ~LinkedList();
        void display();
        void insert_before(const int &key,const int &toinsert);
        void del(const int &todelete);
        Node* find_key(const int &key);
        void distroy();
        int getLength();
    private:
        Node *head;
        Node *cur;
};// 类的后面和 结构体一样,必须加 分号 (;)


LinkedList::LinkedList(const int &n)
{
    head = new Node;
    head->data = http://www.mamicode.com/-1;// 此元素是一个标示符>(2)main函数的测试

#include <iostream>
using namespace std;

// 主函数开始,main()
int main()
{
    int len,todelete,key,toinsert,tofind;// 当然也可以把一些变量同意命名为opt_key
    Node *tmp;
    int cp;
    cout << "请输入所要建立链表的长度:" << endl;
    cin >> len;
    LinkedList *list = new LinkedList(len);// new 出来的对象,用指针指向
    list->display();// 不能用list.display()的
    //LinkedList list = LinkedList(len);
    //list.display();// 注释的语句也是对的,但是必须都得改为 list.xxx;
    //而且new的对象(在堆上)必须手动delete,否则不调用析构函数,非new出来的对象,自动调用析构函数


    cout << "请输入所要删除的元素:" << endl;
    cin >> todelete;
    list->del(todelete);
    list->display();


    cout << "请输入所要查找的元素:" << endl;
    cin >> tofind;
    tmp = list->find_key(tofind);
    cout << "查找后返回main()的结果:" << tmp->data << endl;
    list->display();


    cout << "请输入所要插入的元素和其右侧元素:" << endl;
    cin >> toinsert >> key;
    list->insert_before(key,toinsert);
    list->display();


    cout << "销毁前的链表长度:";
    cout << list->getLength() << endl;
    list->distroy();
    cp = list->getLength();
    cout << "销毁后的链表长度:";
    cout << cp << endl;
    //list->~LinkedList();// 本以为是析构函数是不可以自动调用的,
    //其实不然,课本上明明说析构函数是可以自动调用的,但是有一个前提:对象的生存期即将结束的时
    //在函数结束时调用(栈内存即将销毁时),堆内存中对象是在delete时调用
    delete list;
    return 0;
}

三:心得和体会

(1)在C++中,普通的对象离开它的作用域之后,它的析构函数会被自动调用,从而销毁这个对象,释放它所占的内存,不会发生内存泄露的问题。

(2)new命令可以为对象在内存中动态分配一定的空间,并返回分配空间的首地址;如果在程序运行结束之前没有用delete来销毁这些对象,释放它们所占

用的空间也会发生内存泄露。

3)看到自己上面写的两条心得和体会,自己也扑哧笑了;再看自己写的代码 —— main函数和LinkList类竟然在一起;看来我当初真的幼稚了很多;

(4)再看看现在写的代码,完全不一样了,不过我还是感谢当初的我,那时的我选择的路;成熟是建立在幼稚的基础上的。

(5)最后摘抄的一句话,与大家共享 : 当你的才华撑不起你的野心时,只有静下心来好好学习! 纵使命运注定是个打酱油的,也要打一瓶与别人不一样的酱油!

c++实现list类(第一次用类) —— new对象需delete