它与共享指针(c++)一起正常工作吗

is it working properly with share pointers (c++)

本文关键字:常工作 工作 一起 指针 c++ 共享      更新时间:2023-10-16

我有这样的代码:

typedef std::shared_ptr<int> BUFFER_TYPE  
class MyClass
{
     BUFFER_TYPE buffer;
 public:
     MyClass(int n)
     {
         buffer=std::make_shared<int> (n);
     }
     MyClass()
     {
         buffer=null;
     }
     BUFFER_TYPE GetBuffer()
     {
          return buffer;
     } 
}
MyClass GetMyClass()
{
    MyClass x(200);
    return x;
}
void SetMyClass(MyClass cl)
{
    MyClass y=cl;
    BUFFER_TYPE buffer=y.GetBuffer();
    buffer[20]=100;
}
void main()
{
    MyClass c(100);
    MyClass d=c;
    MyClass e=GetMyClass();
    SetMyClass(e);
    BUFFER_TYPE buffer=e.GetBuffer();
    printf("Buffer is %dn",buffer[20]);
}

这个代码有内存泄漏吗?

它工作正常吗?

我是否正确使用shared_ptr?

请注意,缓冲区应该是一个指针,指向一个数组,比如100 int,而不是一个整数。

由于buffer应该是int的数组,因此代码不正确。std::shared_ptr管理指向单个对象的指针。使用std::vector<int>代替std::shared_ptr<int>

首先,请不要使用宏。只需拼写出类型或使用typedef即可。

其次,不,您没有分配数组。您正在分配一个int

正如其他人已经说过的,您正在为单个int而不是数组分配内存。你可以试试shared_array(http://www.boost.org/doc/libs/1_54_0/libs/smart_ptr/shared_array.htm),或

shared_ptr<vector<int> > 

如果您真正想要的是共享这个缓冲区。