OpenCV 4.10.0
开源计算机视觉库
正在加载...
正在搜索...
无匹配项
公共类型 | 公共成员函数 | 受保护的属性 | 所有成员列表
cv::AutoBuffer< _Tp, fixed_size > 类模板参考

自动分配的缓冲区类。 更多...

#include <opencv2/core/utility.hpp>

cv::AutoBuffer< _Tp, fixed_size > 的协作图

公共类型

typedef _Tp value_type
 

公共成员函数

 AutoBuffer ()
 默认构造函数
 
 AutoBuffer (const AutoBuffer< _Tp, fixed_size > &buf)
 复制构造函数
 
 AutoBuffer (size_t _size)
 接收实际缓冲区大小的构造函数
 
 ~AutoBuffer ()
 析构函数。调用 deallocate()
 
void allocate (size_t _size)
 分配大小为 _size 的新缓冲区。如果 _size 足够小,则使用堆栈分配的缓冲区
 
_Tpdata ()
 返回指向实际缓冲区的指针,堆栈分配或堆分配
 
const _Tpdata () const
 返回指向实际缓冲区的只读指针,堆栈分配或堆分配
 
void deallocate ()
 如果缓冲区是动态分配的,则解除分配它
 
 operator _Tp * ()
 返回指向实际缓冲区的指针,堆栈分配或堆分配
 
 operator const _Tp * () const
 返回指向实际缓冲区的只读指针,堆栈分配或堆分配
 
AutoBuffer< _Tp, fixed_size > & operator= (const AutoBuffer< _Tp, fixed_size > &buf)
 赋值运算符
 
void resize (size_t _size)
 调整缓冲区大小并保留内容
 
size_t size () const
 返回当前缓冲区大小
 

受保护的属性

_Tp buf [(fixed_size > 0) ? fixed_size :1]
 预分配的缓冲区。至少 1 个元素才能满足 C++ 标准要求
 
_Tpptr
 指向实际缓冲区的指针,如果缓冲区足够小,则可以指向 buf
 
size_t sz
 实际缓冲区的大小
 

详细说明

template<typename _Tp, size_t fixed_size = 1024/sizeof(_Tp)+8>
class cv::AutoBuffer< _Tp, fixed_size >

自动分配的缓冲区类。

该类用于函数和方法中的临时缓冲区。如果临时缓冲区通常很小(几 K 的内存),但其大小取决于参数,那么有意义的是在堆栈上创建一个小的固定大小数组,并在它足够大的情况下使用它。如果所需的缓冲区大小大于固定大小,则会动态分配另一个足够大小的缓冲区,并在处理后释放它。因此,在典型情况下,当缓冲区大小很小时,与 malloc()/free() 相关的开销很小。同时,对处理数据的规模也没有限制。

这就是 AutoBuffer 的作用。该模板接受 2 个参数 - 缓冲区元素的类型和堆栈分配元素的数量。以下是该类的使用方法

void my_func(const cv::Mat& m)
{
cv::AutoBuffer<float> buf(1000); // 创建包含 1000 个浮点数的自动缓冲区
buf.allocate(m.rows); // 如果 m.rows <= 1000,则使用预分配的缓冲区,
// 否则将分配 "m.rows" 个浮点数的缓冲区
// 动态分配,并在 cv::AutoBuffer 析构函数中解除分配
...
}
自动分配的缓冲区类。
定义 utility.hpp:102
_Tp buf[(fixed_size > 0) ? fixed_size :1]
预分配的缓冲区。至少 1 个元素才能满足 C++ 标准要求
定义 utility.hpp:150
n 维密集数组类
定义 mat.hpp:812
int rows
行数和列数,或者当矩阵具有超过 2 维时为 (-1, -1)
定义 mat.hpp:2138

成员类型定义文档

◆ value_type

template<typename _Tp , size_t fixed_size = 1024/sizeof(_Tp)+8>
typedef _Tp cv::AutoBuffer< _Tp, fixed_size >::value_type

构造函数和析构函数文档

◆ AutoBuffer() [1/3]

template<typename _Tp , size_t fixed_size = 1024/sizeof(_Tp)+8>
cv::AutoBuffer< _Tp, fixed_size >::AutoBuffer ( )

默认构造函数

◆ AutoBuffer() [2/3]

template<typename _Tp , size_t fixed_size = 1024/sizeof(_Tp)+8>
cv::AutoBuffer< _Tp, fixed_size >::AutoBuffer ( size_t  _size)
explicit

接收实际缓冲区大小的构造函数

◆ AutoBuffer() [3/3]

template<typename _Tp , size_t fixed_size = 1024/sizeof(_Tp)+8>
cv::AutoBuffer< _Tp, fixed_size >::AutoBuffer ( const AutoBuffer< _Tp, fixed_size > &  buf)

复制构造函数

◆ ~AutoBuffer()

template<typename _Tp , size_t fixed_size = 1024/sizeof(_Tp)+8>
cv::AutoBuffer< _Tp, fixed_size >::~AutoBuffer ( )

析构函数。调用 deallocate()

成员函数文档

◆ allocate()

template<typename _Tp , size_t fixed_size = 1024/sizeof(_Tp)+8>
void cv::AutoBuffer< _Tp, fixed_size >::allocate ( size_t  _size)

分配大小为 _size 的新缓冲区。如果 _size 足够小,则使用堆栈分配的缓冲区

◆ data() [1/2]

template<typename _Tp , size_t fixed_size = 1024/sizeof(_Tp)+8>
_Tp * cv::AutoBuffer< _Tp, fixed_size >::data ( )
inline

返回指向实际缓冲区的指针,堆栈分配或堆分配

◆ data() [2/2]

template<typename _Tp , size_t fixed_size = 1024/sizeof(_Tp)+8>
const _Tp * cv::AutoBuffer< _Tp, fixed_size >::data ( ) const
inline

返回指向实际缓冲区的只读指针,堆栈分配或堆分配

◆ deallocate()

template<typename _Tp , size_t fixed_size = 1024/sizeof(_Tp)+8>
void cv::AutoBuffer< _Tp, fixed_size >::deallocate ( )

如果缓冲区是动态分配的,则解除分配它

◆ operator _Tp *()

template<typename _Tp , size_t fixed_size = 1024/sizeof(_Tp)+8>
cv::AutoBuffer< _Tp, fixed_size >::operator _Tp * ( )
inline

返回指向实际缓冲区的指针,堆栈分配或堆分配

◆ operator const _Tp *()

template<typename _Tp , size_t fixed_size = 1024/sizeof(_Tp)+8>
cv::AutoBuffer< _Tp, fixed_size >::operator const _Tp * ( ) const
inline

返回指向实际缓冲区的只读指针,堆栈分配或堆分配

◆ operator=()

template<typename _Tp , size_t fixed_size = 1024/sizeof(_Tp)+8>
AutoBuffer< _Tp, fixed_size > & cv::AutoBuffer< _Tp, fixed_size >::operator= ( const AutoBuffer< _Tp, fixed_size > &  buf)

赋值运算符

◆ resize()

template<typename _Tp , size_t fixed_size = 1024/sizeof(_Tp)+8>
void cv::AutoBuffer< _Tp, fixed_size >::resize ( size_t  _size)

调整缓冲区大小并保留内容

◆ size()

template<typename _Tp , size_t fixed_size = 1024/sizeof(_Tp)+8>
size_t cv::AutoBuffer< _Tp, fixed_size >::size ( ) const

返回当前缓冲区大小

成员数据文档

◆ buf

template<typename _Tp , size_t fixed_size = 1024/sizeof(_Tp)+8>
_Tp cv::AutoBuffer< _Tp, fixed_size >::buf[(fixed_size > 0) ? fixed_size :1]
protected

预分配的缓冲区。至少 1 个元素才能满足 C++ 标准要求

◆ ptr

template<typename _Tp , size_t fixed_size = 1024/sizeof(_Tp)+8>
_Tp* cv::AutoBuffer< _Tp, fixed_size >::ptr
protected

指向实际缓冲区的指针,如果缓冲区足够小,则可以指向 buf

◆ sz

template<typename _Tp , size_t fixed_size = 1024/sizeof(_Tp)+8>
size_t cv::AutoBuffer< _Tp, fixed_size >::sz
protected

实际缓冲区的大小


此类的文档是从以下文件生成的