【发布时间】:2011-03-16 21:52:13
【问题描述】:
我应该出于什么目的使用std::get_temporary_buffer?标准规定如下:
获得一个指向存储空间的指针,该存储空间足以存储多达 n 个相邻的 T 个对象。
我以为缓冲区会在堆栈上分配,但事实并非如此。根据 C++ 标准,这个缓冲区实际上不是临时的。这个函数比全局函数::operator new 有什么优势,全局函数::operator new 也不构造对象。我对以下陈述是等价的吗?
int* x;
x = std::get_temporary_buffer<int>( 10 ).first;
x = static_cast<int*>( ::operator new( 10*sizeof(int) ) );
这个函数是否只存在于语法糖?为什么名字里有temporary?
Dr. Dobb's Journal, July 01, 1996 中建议了一个用于实现算法的用例:
如果没有缓冲区可以分配,或者如果它比请求的小,算法仍然可以正常工作,只是变慢了。
【问题讨论】:
-
仅供参考,
std::get_temporary_buffer将在 C++17 中被弃用。 -
@Deqing 是的。它也将在 C++20 中被删除,并且有充分的理由(如下所述)。所以沿着查看器移动..
标签: c++ memory-management stl buffer temporary