gpt4 book ai didi

c++ - 如何推迟shared_ptr的删除操作?

转载 作者:太空狗 更新时间:2023-10-29 20:03:16 28 4
gpt4 key购买 nike

我在 main 中创建了一个 sample 类的指针。我将此指针传递给函数 function1()。这个函数必须使用指针作为共享指针,并使用这个指针做一些操作。在 function1() 退出期间,由于 shared_ptr 而调用了 sample 的析构函数。当我将相同的指针传递给不同的函数时,该指针不再有效并且程序崩溃。

1.如何在 function1() 中延迟删除操作(销毁调用)?

2.什么是替代方法,以便我可以将指针传递给不同的函数并安全地使用它,尽管某些函数将指针用作 shared_ptr?

这里有示例代码和输出。

#include <memory>
#include <iostream>
#include <string.h>

using namespace std;

class sample
{
private:
char * data;

public:
sample( char * data )
{
cout << __FUNCTION__ << endl;
this->data = new char[strlen( data)];
strcpy( this->data, data );

}
~sample()
{
cout << __FUNCTION__ << endl;
delete this->data;
}
void print_data()
{
cout << __FUNCTION__ << endl;
cout << "data = " << this->data << endl;
}
};

void function1( sample * ptr )
{
shared_ptr<sample> samp( ptr );
/* do something with samp */
ptr->print_data();
}

void function2( sample * ptr )
{
ptr->print_data();
}

int main()
{
char data[10] = "123456789";
data[10] = '\0';
sample * s = new sample( data );

function1( s );
function2( s );

return 0;
}

输出:

sample
print_data
data = 123456789
~sample
print_data
data =

最佳答案

改变

sample * s = new sample( data );

进入

shared_ptr<sample> s(new sample( data ));

并将共享指针传递给所有函数。当这个变量超出范围时它将被删除,对于您的目的来说已经足够晚了

关于c++ - 如何推迟shared_ptr的删除操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30432816/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com