c++ - 如何使C++构造跟踪类带参数?

标签 c++ debugging constructor

阅读时Ruminations on C++我遇到了用于跟踪对象构造的 Obj_trace 类,只需将其作为跟踪对象类声明的一部分即可:

class Foo {
public:
    …
    Obj_trace xxx;
}

它产生如下输出:

Object 1 constructed
Object 2 constructed
Object 1 destroyed
Object 3 constructed

这适用于一个类(class)。现在我想知道如何让它同时处理更多的类,产生类似于这个的输出:

Foo: Object 1 constructed
Bar: Object 1 constructed
Foo: Object 2 constructed

我遇到的最接近的解决方案是 this post由 Nick Gammon 撰写,尽管我想知道是否有一种方法可以使其在不需要继承的情况下工作,并且描述可能超过 1 个字符。

class Obj_trace {
    static int count;
    int ct;

public:
    Obj_trace() : ct(++count) {
        cout << "Object " << ct << " constructed" << endl;
    }

    ~Obj_trace() {
        cout << "Object " << ct << " destroyed" << endl;
    }

    Obj_trace(const Obj_trace & ) : ct(++count) {
        cout << "Object " << ct << " copy-constructed" << endl;
    }

    Obj_trace( Obj_trace && ) : ct(++count) {
        cout << "Object " << ct << " move-constructed" << endl;
    }

    Obj_trace & operator =( const Obj_trace & ) {
        cout << "Object " << ct << " copy op =" << endl;
        return *this;
    }

    Obj_trace & operator =( Obj_trace && ) {
        cout << "Object " << ct << " move op =" << endl;
        return *this;
    }
};

int Obj_trace::count = 0;

最佳答案

template<typename Outer>
class Obj_trace;

像这样使用它

Obj_trace<Foo> xxx;

这还会为您提供每种对象类型的单独计数。在 Obj_trace 中,您可以使用 typeid(Outer) 获取带有类型名称的 type_info

关于c++ - 如何使C++构造跟踪类带参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23189194/

相关文章:

java - 披萨订购计划

c++ - 是否可以通过 systemtap 探测器停止进程以便附加 gdb?

c++ - 通过qtcreator/qtdesigner给QMenu添加QWidgetAction

c++ - 您应该将全局常量放在 C++ 程序中的什么位置?

c++ - Qt 没有匹配函数供调用

java - 按下按钮但未到达单击事件时应用程序崩溃

c# - 在调试托管代码时调试非托管代码

java - Eclipse 调试器似乎无缘无故地退出了,以前有人处理过这个问题吗?

c++ - 为类创建带参数的复制构造函数

java - Swing 组件加载时间太长?