c++ - 指向动态分配数组的静态指针

标签 c++ windows

所以这个问题比较直截了当,我有几个半大型查找表~500kb 一张。现在,这些完全相同的表被几个类实例化(可能很多)使用,考虑到这一点,我不想在每个类中存储相同的表。所以我可以将整个表作为“静态”成员转储到堆栈中,或者我可以有指向这些表的“静态”指针。在任何一种情况下,该类的构造函数都会检查它们是否已初始化,如果没有则进行初始化。但是,我的问题是,如果我选择指向表的静态指针(以免滥用堆栈空间),什么是适当清理这些表的好方法。

另请注意,我考虑过使用 boost::share_ptr,但选择不使用,这是一个非常小的项目,我不打算添加任何依赖项。

谢谢

最佳答案

静态成员永远不会在堆栈上分配。当您声明它们时(当然,您明确声明了),它们会在某处分配空间(数据段?)。

如果查找表是类的成员有意义,那么将它们设为静态成员!

当一个类在堆栈上实例化时,静态成员变量不构成堆栈成本的一部分。

例如,如果您想要:

class MyClass {
    ...
    static int LookUpTable[LARGENUM];
};

int MyClass:LookUpTable[LARGENUM];

当您在堆栈上实例化 MyClass 时,MyClass:LookUpTable 指向您在上面代码示例的最后一行显式分配的对象。最重要的是,不需要释放它,因为它本质上是一个全局变量;它不会泄漏,因为它不在堆上。

关于c++ - 指向动态分配数组的静态指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1230915/

相关文章:

java - 当设置为父级的标准 IO(命令提示符)时,Windows Java 子进程不输入或输出

Python:从多个子进程异步打印标准输出

c++ - 概念转换的等价物是什么?

c++ - 错误 : expected primary-expression before ')' token (C)

c++ - 具有默认模板参数的C++类型别名和前向声明

C++:如何获取浮点指针的地址并将其转换为 void**

java - JavaFX:具有 native 行为的自定义窗口

c++ - 为什么只有数组的第一个元素被初始化为-1?而其余的为 0

windows - 了解 SystemParametersInfo SPI_SETFOREGROUNDLOCKTIMEOUT

windows - 在 Win 7 上使用带有 ANGLE 的 Qt 时出现空白窗口