1

次のようなコードがあります。

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]);
}

このコードでメモリリークはありますか?

正常に動作していますか?

shared_ptr を正しく使用していますか?

buffer は、1 つの整数ではなく、たとえば 100 の int の配列へのポインタである必要があることに注意してください。

4

3 に答える 3

3

bufferは の配列であるはずなのでint、コードは正しくありません。単一のオブジェクトstd::shared_ptrへのポインターを管理します。使用する代わりに。std::shared_ptr<int>std::vector<int>

于 2013-08-21T14:46:35.110 に答える
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 に答える
0

まず、マクロを使用しないでください。タイプをスペルアウトするか、typedef.

第二に、いいえ、配列を割り当てていません。単一の を割り当てていintます。

于 2013-08-21T14:46:07.287 に答える