+ -
当前位置:首页 → 问答吧 → 大虾求解!!!!C++问题!!!!!

大虾求解!!!!C++问题!!!!!

时间:2011-11-28

来源:互联网

2. 参考附件资料《拷贝构造函数的调用》,创建一个包含double*的类,其构造函数通过调用new double来对double*进行初始化,并将构造函数的参数中的值赋给存储单元。析构函数打印出double*所指向的值,并把该值设为-1,对存储单元调用delete,然后将double*指针置0。现在创建一个函数,该函数可通过按值传递方式获取刚创建的类的对象。在main()中调用这个函数,看看会有什么问题发生。通过创建一个拷贝构造函数来解决这个问题。

作者: wade30822   发布时间: 2011-11-28

一个最简单的smart pointer类嘛

作者: qscool1987   发布时间: 2011-11-28

C/C++ code

#include <iostream>
using namespace std;
class base
{
    public:
    base(double a):pt(new double(a)),use(new int(1)){}//1
    base(const base &orig):pt(orig.pt),use(orig.use){++*(orig.use);}//2
    int getacc()const{return *use;}
    ~base()
    {
        cout << *pt << endl;
        if(--*use == 0)//3
        {
            delete pt;
            pt = NULL;
        }
    }
    private:
    double *pt;
    int *use;
};
int main()
{
    int a(4);
    base mb1(a);
    base mb2(mb1);
    cout << mb1.getacc() << endl;
    return 0;
}

我标记的三个位置你不搞清楚你是搞不懂的,C++primer上讲的很清楚

作者: qscool1987   发布时间: 2011-11-28

热门下载

更多