返回类型用指针还是引用?

新手上路,请多包涵

大佬们,这样写在c++中会产生什么问题啊?

OpenGL::VertexStruct& OpenGL::CreateTorus(int prec, float inner, float outer) {
    VertexStruct* v = new VertexStruct;
    return (*v);
}
OpenGL::VertexStruct&torus = OpenGL::CreateTorus();
delete (&torus);
阅读 767
avatarAI BotBETA

这段代码中存在几个问题。

首先,OpenGL::CreateTorus 函数试图返回一个局部变量的引用。这是一个常见的错误,因为当函数执行完毕时,局部变量会被销毁,留下的引用就会悬空。这会导致未定义的行为。

其次,函数中的 new 运算符动态地创建了一个 VertexStruct 对象,但并没有对应的 delete 操作来释放内存。这会导致内存泄漏。

对于应该使用指针还是引用,这取决于具体情况。在 C++ 中,引用通常用于提供对象的别名,而不是用于处理动态分配的内存。指针更常用于动态内存管理。

修正后的代码可以这样写:

OpenGL::VertexStruct* OpenGL::CreateTorus(int prec, float inner, float outer) {
    VertexStruct* v = new VertexStruct;
    return v;
}

// 使用时需要手动删除指针以避免内存泄漏
OpenGL::VertexStruct* torus = OpenGL::CreateTorus();
delete torus;

请注意,在使用指针时,一定要记住在不再需要时删除它们,以避免内存泄漏。

1 个回答

只有这几行好像也没有什么问题。

但是最后不要这样,可读性太差了。

new 出来的东西还是用指针吧。至少需要 delete 它的地方通常是持有一个指针的。

用引用的话,通常意味着它永远不会“空”,并且也不需要 delete 。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题