为什么我们为glfwCreateWindow使用指针?-OpenGL

野兽编码器

我目前正在学习OpenGL,我对C ++也相当陌生。我的问题是为什么在这里使用指针。

GLFWwindow *mainWindow = glfwCreateWindow(WIDTH, HEIGHT, "Test Window", NULL, NULL);

我知道了什么是指针,而不是为什么在这里使用它们。所有的答案表示赞赏,谢谢。

刺柏

glfwCreateWindow()返回一个指向窗口的指针而不是返回实际窗口没有内在的必要性可以设计OpenGL库,以使该代码看起来有所不同,例如:

GLFWwindow mainWindow = glfwCreateWindow(WIDTH, HEIGHT, "Test Window", nullptr, nullptr);

或者实际上,仅使用a的构造GLFWindow

GLFWwindow mainWindow { WIDTH, HEIGHT, "Test Window", nullptr, nullptr }; 

尽管如此,采用这种方式设计API的原因可能有几个:

  1. 直到C ++ 2017,才要求编译器执行RVO返回值优化这意味着,如果您的函数返回type值T,则从理论上讲,您可能需要将T在函数中创建的函数复制到调用该函数的代码的目标位置。在你的情况-返回GLFWwindow可能需要制作副本GLFWwindow; 这对于库可能是有问题的(我不知道OpenGL,所以我也不知道)。
  2. 当您的函数返回a时T*,指向的对象可以是“是T”的任何内容-表示从T(!)继承的任何类型而如果您返回纯文本T,则无法返回继承类型。因此,如果存在一个GLFWwindows的类层次结构,所有这些继承自GLFWwindow一个基类,则可以返回指向该基类的指针,以便您进行一般处理。

PS-具有五个构造函数参数,并传递使不清楚要设置哪个构造函数参数的参数是有问题的设计。具体来说-我们无法说出第一个nullptr表示什么,也不能区分第二个nullptr

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章