Boost 放弃内存的所有权而不通过共享\u ptr释放它

Boost 放弃内存的所有权而不通过共享\u ptr释放它,boost,shared-ptr,make-shared,Boost,Shared Ptr,Make Shared,有没有一种方法可以使共享指针指向不同的内存位置,而不释放它当前指向的内存 请考虑代码: #include <boost/shared_ptr.hpp> #include <boost/make_shared.hpp> #include <iostream> int main() { int *p = new int(); *p = 10; int *q = new int(); *q = 20; boost::sha

有没有一种方法可以使共享指针指向不同的内存位置,而不释放它当前指向的内存

请考虑代码:

#include <boost/shared_ptr.hpp>
#include <boost/make_shared.hpp>
#include <iostream>

int
main()
{
    int *p = new int();
    *p = 10;
    int *q = new int();
    *q = 20;

    boost::shared_ptr<int> ps(p);

    // This leads to a compiler error
    ps = boost::make_shared<int>(q);

    std::cout << *p << std::endl;
    std::cout << *q << std::endl;
    return 0;
}
#包括
#包括
#包括
int
main()
{
int*p=新的int();
*p=10;
int*q=新的int();
*q=20;
boost::共享的ptr ps(p);
//这会导致编译器错误
ps=boost::使_共享(q);
std::cout你不能

当然,您可以释放并重新连接,同时将删除程序更改为无操作

老实说,看起来你只是想

ps = boost::make_shared<int>(*q);

根据上面的声明,如果我不明确释放q,q将有泄漏权?不。共享指针将在销毁/重新分配时充分释放其拥有的资源。我在valgrind下运行代码。它说大小为4的无效读取位于:std::cout@gudge哦,啊哈,我误读了
std::cout
行(顺便说一句,你为什么要这么做?你明确地重新分配了
ps
,所以
p
显然是悬而未决的。我想你是这么做的
std::难道不能告诉我们你想要实现什么(不是/如何实现的/)所以我们可以给出一个有用的答案:不理解围绕问题的负面投票。C++中的智能指针不是容易理解的概念,而是为普通人所理解的。它不像程序不编译,关键字丢失等。问题是用一个工作代码小的。人们还希望问什么?
0
20