1

I have a code such as this:

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 %d\n",buffer[20]);
}

Is there any memory leak with this code?

Is it working properly?

Am I using shared_ptr correctly?

Please note that buffer should be a pointer to an array of say 100 int and not one integer.

4

3 回答 3

3

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

于 2013-08-21T14:46:35.110 回答
0

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

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

于 2013-08-21T14:46:07.287 回答
0

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

shared_ptr<vector<int> > 

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

于 2013-08-21T14:54:19.473 回答