我创建了一个指针sample
主要类。我正在将此指针传递给函数function1()
。该函数必须使用指针作为共享指针并使用该指针执行一些操作。退出期间function1()
的析构函数sample
由于调用shared_ptr
。当我将相同的指针传递给不同的函数时,该指针不再有效并且程序崩溃。
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;
}
output:
sample
print_data
data = 123456789
~sample
print_data
data =
Change
sample * s = new sample( data );
into
shared_ptr<sample> s(new sample( data ));
并将共享指针传递给所有函数。当该变量超出范围时它将被删除,对于您的目的来说已经足够晚了
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)