c++ - 编译器会为这个对象保留内存吗?

标签 c++ class memory compiler-construction

我有以下两个类:

template <size_t size>
class Cont{
 public:
 char charArray[size];
};
template <size_t size>
class ArrayToUse{
 public:
 Cont<size> container;
 inline ArrayToUse(const Cont<size+1> & input):container(reinterpret_cast<const Cont<size> &>(input)){}
};

我在全局范围内有以下三行代码:

const Cont<12> container={"hello world"};
ArrayToUse<11> temp(container);
char (&charArray)[11]=temp.container.charArray;

在我的全部代码中“容器”对象的唯一用途是初始化“ArrayToUse”类的对象,如前所述,在“charArray”初始化后引用“temp.container.charArray”我将使用它在我的其余代码中引用,现在我想知道编译器是否为“容器”对象保留内存,因为它有临时用途?

最佳答案

在全局范围内定义的任何变量都在编译时为它保留了内存。这并不意味着它一定会被正确初始化,但它仍然存在。

在链接时,Visual C++ 提供了 strip unused data and functions via /OPT 的选项- 看这里。

关于c++ - 编译器会为这个对象保留内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3972109/

相关文章:

c++ - remove_pointer + typename 错误

c++ - 如何从另一个类调用指向成员函数的指针?

class - 我是否必须将 get/set 方法放在 matlab 的类定义中?

c++ - 在其他私有(private)类成员中使用私有(private)类成员

c++ - GCC 中地址清理程序的有意义的堆栈跟踪

c++ - 巨大的 std::vector<std::vector> 不会在销毁时释放所有内存

c++ - 为什么 printf 的相同表达式的输出与 cout 不同?

c++ deque vs queue vs stack

c++ - 在 lambda [C++] 中捕获它的替代方法

c - 使用 malloc 分配的空间传递指针