C样式对象删除的包装器
wrapper for C-style object deletion
我最近开始学习OpenGL(具体来说是3.3版),我还想在一些功能上使用一些面向对象的设计。例如,我想创建一个名为Shader的类,该类从文本文件中读取着色器,附加、分离它等。我遇到的问题是析构函数。我想所有OpenGL对象的工作方式或多或少都像
glCreateShader()
// some code here
glDeleteShader()
假设我这样设计我的课(这只是一个草图,所以没有任何细节)
class Shader
{
public:
// read from file - not important right now
Shader( ){}
void delete()
{
glDeleteShader();
}
~Shader()
{
glDeleteShader();
}
};
我可以创建我的对象并像这个一样删除它
Shader x;
x.delete();
但这不会删除对象本身,只会释放OpenGL着色器的内存。最好有这样的
Shader x;
delete(x);
其中函数delete()从内存中删除所有内容(与对象本身一起)。这可能吗,还是我应该只使用指针?
Shader* x = new Shader();
delete x;
我对任何C库都有同样的问题。
我可以创建我的对象并像这样删除它
Shader x; x.delete();
首先,delete
是一个关键字,因此它可能不是函数的名称。
假设两次调用glDeleteShader
是可以的,这是可以的。但对delete()
函数的调用是多余的,因为析构函数会自动处理对glDeleteShader
的调用。如果对glDeleteShader
的重复调用是不可以的,那么调用delete()
不仅是多余的,而且是一个错误。
Shader x; delete(x);
其中函数delete()从内存中删除所有内容(与对象本身一起)。有可能吗。。。
无法通过调用函数从内存中删除自动存储持续时间的对象(除非用新对象替换存储,但这与此问题的主题相去甚远)。自动对象已从内存中删除当它们超出范围时自动。
还是应该只使用指针?
没有,除非你需要。如果自动对象是一个选项,它们是更好的选项。只需这样做:
Shader x;
// glDeleteShader called when x is destroyed
相关文章:
- 将数组的地址分配给变量并删除
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C/C++编译器通常会删除重复的库吗
- 从链接列表c++中删除一个项目
- C++如何通过用户输入删除列表元素
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 如何在c++17中制作一个模板包装器/装饰器
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 使用函数"remove"删除重复元素
- 将此私有删除器函数包装在结构中的目的是什么?
- 使用 C++ shared_ptr 用删除器包装 C 结构
- C样式对象删除的包装器
- 警告C4150在尝试包装本机C 类时,指向不完整类型的指针删除
- 在C++中删除提升包装器中的对象
- C++:是否必须在包装器中放入一个策略以避免裸新/删除
- c++中新建和删除ptr包装器类
- 如何将原始指针包装到shared_ptr中,并防止shared_ptr删除对象
- 如何删除使用SWIG生成的Python包装器中的堆积对象