c++ - 如何在构造函数和析构函数中增加模板类中的静态 int 值?

标签 c++ templates constructor static destructor

假设我们有一个模板ptr。 ptr 类的构造函数可以采用 int、double、另一种手工结构等值,因为它是一个模板类。

我想确切地查看这些构造函数和析构函数被调用了多少次,以及还有被调用的数据类型。这个可以看吗?

现在我在模板类中有一个 static int 值和 2 个构造函数(1 个默认构造函数)和 1 个析构函数,我在其中增加/减少 static int 值的值。

template<class T>
class ptr
{
private:
    T* data;  
public:
    ptr();
    ptr(T* data);
    ~ptr();
    static int number;
};

template<class T>
int ptr<T>::number = 0;

我如何才能看到调用这些构造函数和析构函数的类型?我现在看到的只是静态 int 的值,而不是调用它的类型。

最佳答案

如果您确实希望计算所有实例(独立于类型),您可以尝试为它们提供一个通用的非模板化父类(super class):

class uniptr {
  protected:
    static int number;    
}

template<class T>
class ptr: public uniptr
{
private:
    T* data;  
public:
    ptr();
    ptr(T* data);
    ~ptr();
};

这似乎通过一些合理的封装来做你想做的事。如果不是很清楚这是有效的,因为只有一个类 uniptr 声明(因此只有一个静态 int),即使可能使用了多个版本的 ptr(如 ptr<int>ptr<String>)。

关于c++ - 如何在构造函数和析构函数中增加模板类中的静态 int 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33171070/

相关文章:

c++ - 在 vector 之后插入元素和移动元素

c++ - 是否可以使用在 Windows 10 上运行的 Qt 5.12 构建针对 Windows XP 的 Qt 应用程序?

c++ - 用作模板参数以比较 double 值的类型

c++ - 模板选择 const 引用而不是 const 指针

java - 这个 C++ 函数与等效的 java 函数有何不同?

c++ - 我可以使用加密哈希作为文件名还是必须先转换它?

c++ - 函数模板 : typename declaration

c++ - 使用 Gmock 模拟参数化构造函数

java - 为什么在显式调用构造函数时不能引用实例方法?

C++ 风格 : use parameter or member in constructor body