gpt4 book ai didi

c++ - 测试函数是虚函数还是构造函数

转载 作者:搜寻专家 更新时间:2023-10-31 01:14:54 25 4
gpt4 key购买 nike

我正在阅读 Never Call Virtual Functions during Construction or Destruction Scott Meyer 关于 C++ 的基本用法。

我想知道 g++ 是否有一些编译器标志来警告这种真正有效的错误编码。如果不是,有什么方法可以编写代码来执行此检查?

如果我要编写此类检查代码,我会通过使用堆栈并在每次调用时插入一条信息(一种实现调用堆栈的方法)来完成这项工作。

我仍然需要一种方法来测试函数是否为虚函数或函数是否为构造函数:你知道有没有办法做到这一点?类似于 .NET“反射”想法的东西?

最佳答案

> cat nevercall.cpp             
class Transaction {
public:
Transaction();
virtual void logTransaction() const = 0;

// ...
};

Transaction::Transaction()
{
//...
logTransaction();
}

class BuyTransaction: public Transaction {
public:
virtual void logTransaction() const;

//...
};

class SellTransaction: public Transaction {
public:
virtual void logTransaction() const;

// ...
};

int main()
{
BuyTransaction b;
}

如果(且仅当)virtual void Transaction::logTransaction() constpure 时,使用 -Weffc++ 会发出警告,因为它在 Meyer 的示例代码中:

> g++ -Weffc++ nevercall.cpp -o nevercall
nevercall.cpp:1:7: warning: 'class Transaction' has virtual functions and accessible non-virtual destructor [-Wnon-virtual-dtor]
nevercall.cpp: In constructor 'Transaction::Transaction()':
nevercall.cpp:12:20: warning: pure virtual 'virtual void Transaction::logTransaction() const' called from constructor [enabled by default]
nevercall.cpp: At global scope:
nevercall.cpp:15:7: warning: 'class BuyTransaction' has virtual functions and accessible non-virtual destructor [-Wnon-virtual-dtor]
nevercall.cpp:22:7: warning: 'class SellTransaction' has virtual functions and accessible non-virtual destructor [-Wnon-virtual-dtor]

关于c++ - 测试函数是虚函数还是构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10782878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com