c0d*_*der 3 c++ smart-pointers unique-ptr
我有以下简单的代码,我还没有找到一个线程,其中智能指针用于这个简单的情况,而是复制对象:
int main()
{
int i = 1;
std::unique_ptr<int> p1(&i);
*p1 = 2;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
_BLOCK_TYPE_IS_INVALID当指针超出范围时,会导致这种情况.如果我打电话p1.release(),代码工作正常,我不会得到这个错误.我认为这样的指针很聪明,可以处理悬空指针?
另一种方法是,如果我有i的副本,则不会出现上述错误:
std::unique_ptr<int> p1(new int(i));
Run Code Online (Sandbox Code Playgroud)
在这里使用智能指针有什么好处,我不想执行本地副本?
如果我要使用原始指针:
int i = 1;
int *p1 = &i;
*p1 = 2;
Run Code Online (Sandbox Code Playgroud)
即使我不编码,我也不会收到错误:
p1 = nullptr;
Run Code Online (Sandbox Code Playgroud)
qxz*_*qxz 11
std::unique_ptrs用于处理动态分配的内存; 当你构造一个时,他们被认为拥有指针的所有权.
你int i;是在堆栈上,因此不是动态分配的; 它的所有权不能从堆栈中拿走.当unique_ptr析构函数尝试delete使用你给它的指针时(因为它认为没有人拥有它),你会得到该错误,因为delete它只能用于创建的指针new.
给出你的简短例子,我不知道它在哪个上下文...但是你应该使用原始指针(或者如你所说的那样复制)用于堆栈分配的变量.
| 归档时间: |
|
| 查看次数: |
4522 次 |
| 最近记录: |