大佬们,这样写在c++中会产生什么问题啊?
OpenGL::VertexStruct& OpenGL::CreateTorus(int prec, float inner, float outer) {
VertexStruct* v = new VertexStruct;
return (*v);
}
OpenGL::VertexStruct&torus = OpenGL::CreateTorus();
delete (&torus);
大佬们,这样写在c++中会产生什么问题啊?
OpenGL::VertexStruct& OpenGL::CreateTorus(int prec, float inner, float outer) {
VertexStruct* v = new VertexStruct;
return (*v);
}
OpenGL::VertexStruct&torus = OpenGL::CreateTorus();
delete (&torus);
这段代码中存在几个问题。
首先,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;
请注意,在使用指针时,一定要记住在不再需要时删除它们,以避免内存泄漏。
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.5k 阅读
3 回答476 阅读✓ 已解决
只有这几行好像也没有什么问题。
但是最后不要这样,可读性太差了。
new 出来的东西还是用指针吧。至少需要 delete 它的地方通常是持有一个指针的。
用引用的话,通常意味着它永远不会“空”,并且也不需要 delete 。