阅读时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/