注册 登录
编程论坛 C++教室

计算类对象被创建,复制,赋值或者删除的次数问题

jxlcs 发布于 2013-04-18 21:03, 888 次点击
此为accelerated c++ 这本书上的习题11-5. 完全不懂,书中没提到过默认构造函数的计数方法,想不出来.求助

题目:在Student_info 类中加入计数代码,计算一下对象被创建,复制,赋值或者删除的次数.用这个可计数的类运行第六章的学生成绩程序.使用这个其有计数功能的Student_info类可以算出在库中的算法进行了多少次复制操作.对比库中不同的类测到的复制次数,可以估计出这些不同的类对资源的消耗量.试一试进行计数并对结果进行分析.

Student_info类:
程序代码:
class Student_info
{
    public:
        Student_info();        //构造一个空的 Student_info 对象
        Student_info(std::istream&);        //读一个流从而构造一个对象
        std::string name() const { return n; }
        bool valid() const { return !homework.empty(); }
        std::istream& read(std::istream&);
        double grade() const;
    private:
        std::string n;
        double midterm, final;
        std::vector<double> homework;
};

bool compare(const Student_info&, const Student_info&);


我只想到了在每次调用创建,复制,赋值等操作的时候手动调用一次计数函数.
怎样自动判断调用了复制构造函数,自动计数呢?

[ 本帖最后由 jxlcs 于 2013-4-18 21:48 编辑 ]
6 回复
#2
peach54602013-04-18 21:05
静态变量,谢谢
#3
jxlcs2013-04-18 21:08
回复 2楼 peach5460
问题是怎样判断是否调用了库中的复制构造函数呢
总不该是我每次进行复制操作的时候就自己手动调用一次计数函数吧, 这也太傻瓜了吧.

[ 本帖最后由 jxlcs 于 2013-4-18 21:12 编辑 ]
#4
邓士林2013-04-18 22:54
定义个静态变量就可以进行统计功能,静态局部变量在函数调用结束后不消失而保留原值,及占用的内存空间不释放
#5
peach54602013-04-19 08:05
以下是引用jxlcs在2013-4-18 21:08:57的发言:

问题是怎样判断是否调用了库中的复制构造函数呢
总不该是我每次进行复制操作的时候就自己手动调用一次计数函数吧, 这也太傻瓜了吧.

就是这么傻瓜...
有兴趣,去查阅一下stl的智能指针
#6
rjsp2013-04-19 08:41
类似于这样
struct foo
{
    static size_t num = 0;

    foo() { ++num; } // 只要调用这个默认构造函数,num就加1
    其他(非缺省构造们、拷贝构造、赋值操作、析构 等)类似
}
#7
jxlcs2013-04-19 14:40
额 看来是我想多了。
本以为还能有自动判断构造函数被调用并计数的方法呢。

谢谢各位
1