c++ 分配 *new Object() 来引用
c++ allocate *new Object() to reference
我有一个关于在 c++ 中分配的问题。我有这个代码:
vector<unsigned char> &v = *new vector<unsigned char>();
现在的问题是,取消引用对象并将其直接分配给引用通常是一个好主意吗?
在我看来,这使得使用该对象变得更加容易,因为现在您可以执行以下操作:
v.push_back('a');
v[0];
而不是
v->push_back('a');
(*v)[0];
终于,我能做到
delete &v;
释放我的堆
只是因为(相同)好答案的数量:我知道我可以使用堆栈变量但就我而言,我需要它在堆上!但是使用堆或堆栈变量的问题则是另一个问题。
所以我保持这个例子简单,特别是没有问我是否应该分配变量。
取消引用对象并将其直接分配给引用通常是一个好主意吗?
不,一点也不。
如果你不需要动态分配,因为对象只需要持续到当前作用域的时间,那么创建一个自动变量:
vector<unsigned char> v;
如果您确实需要一个动态对象,那么尝试伪装它是忘记它需要删除的好方法。最好的办法是使用智能指针,这样您根本不需要记住删除它;否则,请使用指针。
这纯粹是一个风格问题。 我工作过的地方都没有使用了这个约定,所以它可能会改变新人的路线您的组织,但这是一个有效的约定。
它应该是何时使用时更大定义的一部分指针,以及何时使用引用。 (你会发现很多这方面的变化;我至少用过三种不同的不同公司的惯例。
将堆对象主要存储在引用变量中不是一个好主意,因为Joachim Pileborg在他的评论中给出了原因。您最终需要删除对象,最好通过指针变量来完成(在引用中,人们总是会想知道实际对象是否位于其他地方)。
你可以
这样做:
...
{
vector<unsigned char> v; // this allocates the vector in the stack
v.push_back('a');
v[0];
}
...
据我所知,没有必要在堆中分配向量。
您应该阅读有关堆和堆栈内存的信息:
堆栈和堆是什么以及在哪里?
堆叠、静态和堆C++
相关文章:
- 将对象数组的引用传递给函数
- 什么时候在C++中返回常量引用是个好主意
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 何时在引用或唯一指针上使用移动语义
- 如何在c++中使用引用实现类似python的行为
- 编译C++时未定义的引用
- Ctypes wstring通过引用传递
- c++r值引用应用于函数指针
- 理解c++中的引用
- C++取消引用指针.为什么会发生变化
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- QPointer::clear() 是删除其引用的指针,还是"Clears this QPointer object."其他含义?
- 对web::json::value::object的未定义引用,即使包含json.h
- 2 第三方 C 和 C++ 库与 Object 具有相同的类和结构名称,所以我得到这个引用'Object'是模棱两可的错误
- C++ - 为什么可以返回对"stack object"的引用
- 未定义对Base::object链接器错误@c++w/freeglut的引用
- 为什么stl_tree.h中的end()返回对迭代器对象的引用,而begin()返回object ?
- c++ 分配 *new Object() 来引用
- 类型为"std::vector<Object*>&"的非常量引用的初始化无效