根据参考,简单的 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。