OpenCV 4.13.0
开源计算机视觉库 (Open Source Computer Vision)
正在加载...
正在搜索...
未找到匹配项
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 >

自动分配缓冲区类。

该类用于函数和方法中的临时缓冲区。如果临时缓冲区通常很小(内存几 KB),但其大小取决于参数,那么创建一个小的固定大小的数组放在栈上并在足够大时使用它是有意义的。如果所需的缓冲区大小大于固定大小,则动态分配一个足够大的缓冲区并在处理后释放。因此,在典型情况下,当缓冲区大小很小时,不会有与 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:840
int rows
行数和列数,当矩阵超过 2 维时为 (-1, -1)
定义 mat.hpp:2204

成员类型定义说明

◆ value_type

template<typename _Tp , size_t fixed_size = 1024/sizeof(_Tp)+8>
_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 ( )
内联

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

◆ data() [2/2]

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

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

◆ 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 * ( )
内联

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

◆ operator const _Tp *()

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

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

◆ 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]
保护

预分配的缓冲区。至少 1 个元素以符合 C++ 标准要求

◆ ptr

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

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

◆ sz

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

实际缓冲区的大小


该类的文档由以下文件生成: