是否保证STD :: vector默认结构不会调用新的



根据参考,简单的 std::vector<T> vec;创建一个emtpy容器(默认构造函数(。这是否可以保证没有动态内存分配?还是可以选择保留一些内存?

我知道,对于这个空的构造函数,由于C 11,T类型没有构造。但是,我想知道,是否也可以保证在堆上没有任何分配。IE。上面的行只是堆栈/成员的几个nullptr

我用VC140进行了测试,它确实没有动态分配。

这是否可以保证没有动态内存分配?

否。但是,实现不分配内存是很典型的。我还没有看到标准的库实现。

或可以选择保留一些内存?

可能,但这是非典型的。

我知道,对于这个空的构造函数,由于C 11

T类型没有构造

也在C 11。

之前

std库是C 语言的一部分。

几乎任何对任何性病库类或功能的呼吁都可以做病理和疯狂的事情。但是int x=7;也是如此 - 标准不是为了防御坦率的敌对C 实现,其中包括STD库。

据说,零参数构造函数是std vector的零。这意味着意图不分配。敌对的实施是可以自由分配,捕获任何错误并继续进行的,无论分配是否成功。敌对的实施也可以自由计算到47万亿,在随机数据上运行一些FFT,旋转神经网络并针对莎士比亚进行训练,构成一些十四行诗,然后继续进行,好像什么都没发生。该标准在C 中任何操作的可视诗歌构成上无话可说;只要动作没有可观察到的副作用(在抽象机器中(,标准就没有意见。

实际上,std::vector<T>()没有理由分配,并且以后的操作无法分配。我可以看到一个乐器构建,分配了一些终身跟踪令牌来强制迭代器无效错误,但这只能在带有额外标志的调试中启用(例如-DCMP_JUN17(。

更担心诗歌,而不是呼唤新的诗。

没有保证。

如果_iterator_debug_level&gt; gt;0。

最新更新