C++ C++;:获取拥有行指针的唯一\u ptr
我有unique_ptr和unique_ptr指向的行指针。如何仅使用行指针rowPtr调用unique_ptr的releaseC++ C++;:获取拥有行指针的唯一\u ptr,c++,pointers,row,unique-ptr,C++,Pointers,Row,Unique Ptr,我有unique_ptr和unique_ptr指向的行指针。如何仅使用行指针rowPtr调用unique_ptr的release #include <iostream> #include <memory> int main() { std::unique_ptr<int> uniqPtr = std::make_unique<int>(2); int* rowPtr = uniqPtr .get(); // call .
#include <iostream>
#include <memory>
int main()
{
std::unique_ptr<int> uniqPtr = std::make_unique<int>(2);
int* rowPtr = uniqPtr .get();
// call .release for uniqPtr using only rowPtr
return 0;
}
#包括
#包括
int main()
{
std::unique_ptr uniqPtr=std::make_unique(2);
int*rowPtr=uniqPtr.get();
//调用。仅使用rowPtr释放uniqPtr
返回0;
}
UPD:
我会澄清问题。我需要uniqPtr仅使用rowPtr变为空
如何仅使用行指针rowPtr调用unique_ptr的release
#include <iostream>
#include <memory>
int main()
{
std::unique_ptr<int> uniqPtr = std::make_unique<int>(2);
int* rowPtr = uniqPtr .get();
// call .release for uniqPtr using only rowPtr
return 0;
}
你不能。只能通过调用唯一指针上的
release
成员函数来释放唯一指针。您不能使用,也不需要裸指针来执行此操作。您不需要。原始指针不参与所有权。他们也不会
当您调用
get
时,您明确地说:“我只需要一个原始指针。我不想干扰托管指针的所有权。”您可以使用int*p=uniqPtr.release()
来获取指针而不销毁它p
仍然指向有效内存,但uniqPtr
不再管理它
您还可以使用uniqPtr.reset(nullptr)
来销毁对象,并将unique\u ptr
重置为nullptr
。在这种情况下,ptr
不再指向该对象,该对象的内存已被释放
在任何情况下,您都不能使用由
uniqPtr
管理的原始指针来更改唯一\u ptr
对象的状态,因为原始指针与它没有任何关联,它只是由它管理。uniqPtr
不仅仅指向int
,它拥有它。如果uniqPtr
外部的某个实体能够强迫其放弃所有权,那将是一个糟糕的情况。(在现实世界中,我们通常称之为“盗窃”。)你知道有没有办法让uniqPtr空而不调用它吗?@joungcpser根据我的回答,没有这种方法。你知道有没有办法让uniqPtr空而不调用它吗?你不能。您可以只分配一个与ptr.reset(new_ptr)
基本相同的新指针。您知道是否有方法可以使uniqPtr为空而不调用它吗?@joungcpserstd::unique_ptr
的全部目的是std::unique_ptr
控制指向对象的生存期。您试图解决的实际问题是什么?听起来你正在与unique\u ptr
作斗争,并且面临着一个“问题”,如果你不首先使用unique\u ptr
,你就不会遇到这个问题