摘要:
刚刚在洗澡的时候在想函数式编程的东西,函数式编程不是将函数看成一个对象,函数就是变量,它可以作为参数使用,它既可以作为左值来使用也可以作为右值来使用,函数式编程任何一个函数对于同一个输入,既在函数参数列表中的输入,不会产生多余两种不同的结果,为什么呢?因为函数式编程内部所有的变量不受外部的影响,也就是说,没有其他方法来改变我的内部状态,我的内部状态只有局部变量,没有全局变量,反正就是没有与其他函数共享的变量,所以函数式编程就像数据从函数的入口进入,从函数的出口出去,经过函数加工后,再流入其他的函数。函数式编程的思想在于递归,但是以前我一直没有理解,为什么是递归,我洗澡时候想了想,应该是因为,如 阅读全文
摘要:
对于C/C++程序员来说,指针是天堂,同时指针也是地狱。指针有多少好处,又有多少让人头疼的问题我们这里就不多说了。但为了局部解决指针的问题,我们提出了智能指针这个概念。实际上,我一直不明白,智能指针用于干什么!直到我遇到有关栈和堆问题的时候,才依稀有了点感悟,我现在的感悟几乎肯定是不全面的,但是很重要。几乎有关指针的问题的出现集中在指针指向堆上空间的时候,为什么呢?如果指针指向的是栈上的空间,我们知道这里的空间是有系统自动管理的,申明释放都是由系统根据栈的策略来进行的。我们能够干预的部分很少。而对于指向堆空间的指针,由于申请(new),和释放(free)必须要程序员显示的进行调用,并且该空间的 阅读全文
摘要:
以前写过一篇关于智能指针的文章,但是还是没有搞清楚两个东西:1。智能指针如何调用被智能指针指向的对象的成员函数,我不知道如何只通过智能指针去访问指向对象的成员方法,请看我的写的智能指针的demo。#include <iostream>using namespace std; class A{private: int n;public: A(int m):n(m) {} ~A(){ cout<<"~A() is called\n"; } int get() const{ cout<<"get() is called\n" 阅读全文
摘要:
昨天晚上在看智能指针的时候,我发现自己连一个拷贝构造函数和赋值构造函数都写不出来,自己就尝试写了一个版本,结果发现错误百出,对于拷贝构造函数和赋值构造函数的理解仅仅停留在理论的方面,而不知其中太多的内涵。比如我们都知道拷贝构造函数和赋值构造函数最大的不同在于:拷贝构造是确确实实构造一个新的对象,并给新对象的私有成员赋上参数对象的私有成员的值,新构造的对象和参数对象地址是不一样的,所以如果该类中有一个私有成员是指向堆中某一块内存,如果仅仅对该私有成员进行浅拷贝,那么会出现多个指针指向堆中同一块内存,这是会出现问题,如果那块内存被释放了,就会出现其他指针指向一块被释放的内存,出现未定义的值的问题, 阅读全文