在下面的代码中,ptr删除的时候会Base调用析构函数,而不是析构函数Derived(因为析构函数Base不是虚函数).
class Base
{
int b;
};
class Derived : public Base
{
int d;
};
int main(void)
{
Base * ptr = new Derived();
delete ptr;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Valgrind报告该程序不包含内存泄漏,我认为在这种特殊情况下删除所有新建数据的意义上都是如此.我的问题是 - 假设Derived未调用(默认)析构函数,何时以及如何d释放或回收内存?
我需要根据非常数因子将值从一个单位转换为另一个单位.输入值范围为0到1073676289,范围值范围为0到1155625.转换可以这样描述:
output = input * (range / 1073676289)
Run Code Online (Sandbox Code Playgroud)
我自己的初始定点实现感觉有点笨拙:
// Input values (examples)
unsigned int input = 536838144; // min 0, max 1073676289
unsigned int range = 1155625; // min 0, max 1155625
// Conversion
unsigned int tmp = (input >> 16) * ((range) >> 3u);
unsigned int output = (tmp / ((1073676289) >> 16u)) << 3u;
Run Code Online (Sandbox Code Playgroud)
我的代码可以改进为更简单或更准确吗?