-1

C++ コードからすべての参照を削除する必要があります。純粋な C に関する私の知識はかなり古いため、意見を求めたいと思います。このようなメモリ割り当てに疑問がありますか?:

void myallocator2(int** mystr, int* howmany)
{
    *howmany = 40;
    *mystr = (int*)malloc( (*howmany) * sizeof(int));
    for(int i=0;i<*howmany;++i)
        (*mystr)[i] = i*2;
}

  int** mystr;
  int* howmany = new int();
  *howmany = 0;
  myallocator2(mystr,howmany);
  for(int i=0;i<*howmany;++i)
      do something (*mystr)[i]
4

2 に答える 2

2

これがC++バージョンのコードです。厄介な動的割り当てはありません。

class A
{
public:
    int a_;
};

void myallocator2(std::vector<A>& mystr, int& howmany)
{
    howmany = 40;
    mystr.clear();
    mystr.reserve(howmany);
    for(int i=0;i<howmany;++i)
        mystr[i].a_ = i*2;
}

std::vector<A> mystr;
int howmany = 0;
myallocator2(mystr,howmany);
for(int i=0;i<howmany;++i)
    do something mystr[i].a_;

免責事項-はい、「C++コードからすべての参照を削除する必要があります」を無視することにしました。あなたが私たちに明確でよく考えられた動機を与えない限り、それはただのばかげた要件です。

于 2012-10-03T13:05:14.003 に答える
0

安全な方法が必要な場合は、共有ポインターを使用してください

于 2012-10-03T13:02:12.770 に答える