cIp*_*h3r 0 c++ allocation reference
我有一个关于在c ++中分配的问题.我有这个代码:
vector<unsigned char> &v = *new vector<unsigned char>();
Run Code Online (Sandbox Code Playgroud)
现在的问题是,取消引用对象并将其直接分配给引用通常是一个好主意吗?
在我看来,这使得使用对象变得更容易,因为现在你可以这样做:
v.push_back('a');
v[0];
Run Code Online (Sandbox Code Playgroud)
代替
v->push_back('a');
(*v)[0];
Run Code Online (Sandbox Code Playgroud)
最后,我能做到
delete &v;
Run Code Online (Sandbox Code Playgroud)
释放我的堆
仅仅因为(相同)好的答案的数量:我知道我可以只使用堆栈变量但在我的情况下,我需要它在堆上!但是使用堆或堆栈变量的问题是另一个问题.
所以我保持这个例子简单,特别是没有问我是否应该分配变量.
取消引用对象并将其直接分配给引用通常是个好主意吗?
一点都不.
如果您不需要动态分配,因为对象只需要持续与当前范围一样长,然后创建一个自动变量:
vector<unsigned char> v;
Run Code Online (Sandbox Code Playgroud)
如果你确实需要动态对象,那么试图伪装它是一种忘记它需要删除的好方法.最好的方法是使用智能指针,这样你根本不需要记住删除它; 如果失败了,请使用指针.