ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2019-07-25 01:08:46  阅读:146  来源: 互联网

标签:c shared-ptr pointers smart-pointers


我在main中创建了一个示例类的指针.我将此指针传递给函数function1().此函数必须使用指针作为共享指针,并使用此指针执行某些操作.在退出函数1()时,由于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;
}

输出:

sample
print_data
data = 123456789
~sample
print_data
data = 

解决方法:

更改

sample * s = new sample( data );

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

并将共享的poiter传递给所有函数.当此变量超出范围时,它将被删除,因此对于您的目的而言已经足够晚了

标签:c,shared-ptr,pointers,smart-pointers
来源: https://codeday.me/bug/20190725/1527837.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有