C++ C++;:获取拥有行指针的唯一\u ptr

C++ 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 .

我有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 .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为空而不调用它吗?@joungcpser
std::unique_ptr
的全部目的是
std::unique_ptr
控制指向对象的生存期。您试图解决的实际问题是什么?听起来你正在与
unique\u ptr
作斗争,并且面临着一个“问题”,如果你不首先使用
unique\u ptr
,你就不会遇到这个问题