-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 回答