c++ - "scoping into"C++ 中类的头文件是否创建了它的实例?

标签 c++ memory

作为我正在进行的项目的一部分,我必须设计一个离散 vector 微积分计算器。此外,主程序必须能够处理相当大的数据集。我的想法是创建一个名为 Calculator 的类,它只有成员函数。所以我想到了两种方法来使用 Calculator 中的函数,如下所示:

第一种方法是实例化类并像这样使用它的成员:

/* inside main program */
Vector V;
Calculator calc;
Vector Vgrad = calc.gradient( V );

另一种方式(我认为)是“范围内”,希望这不会实例化类:

/* inside main program */
Vector V;
Vector Vgrad = Calculator::gradient( V );

我想知道第二个版本是否跳过了必须实例化类的步骤。此代码并行运行,我不希望每个线程都创建自己的 Calculator 以节省空间。所以我想知道第二种写法是否 (a) 有效,以及 (b) 更节省内存。欢迎任何其他设计想法,但请记住,我想将这些实体放在一个类中以提高可读性。

最佳答案

是的,第二种方法不实例化任何类。这并不是说开销很大,而是这样确实节省了一些地方。

作为替代方案,只需考虑声明一个Calculator 命名空间;如果你想要的只是一个不同的范围。一个没有非静态成员和方法,只有静态方法或成员的类,几乎只是一个它自己的命名空间。

关于c++ - "scoping into"C++ 中类的头文件是否创建了它的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37847626/

相关文章:

c++ - 如何处理 pam_authenticate 的 PAM_AUTHTOK_RECOVERY_ERR 返回值以获得有效的用户和密码?

c - 我应该在发生 fatal error 时释放分配的内存吗?

javascript - javascript/html:替换嵌入式视频的内存泄漏?

c++ - 使用多个分隔符 C++ 读取格式化数据

c++ - 使用 libpcap 和 c++ 构建错误 pcap_loop

围绕共享库边界的 C++ 接口(interface)设计

c++ - friend 类定义

c++ - 为什么使用最大位域序列定义 C++ 内存?

javascript - 使用通用的空函数而不是在每个类实例中创建一个新函数是否更有效?

hadoop - Cloudera 管理器 "Memory Overcommit Validation Threshold"