带有指针的动态分配

Dynamic Allocation with pointers c++

本文关键字:动态分配 指针      更新时间:2023-10-16
Transaction *trans = new Transaction[MAX_NUM];
int currentnum;

addtrans(string balance, double amt){
    trans[currentnum] = new Transaction(balance, amt);
    currentnum ++;
}
//constructor
Transaction(string type, double amt){
      Transtype = type;
       Transamt = amt;
 }

我创建了一个指向数组的指针。

我试图发送平衡和amt到数组,但我得到错误'不匹配'operator=' '

Transaction *trans = new Transaction[MAX_NUM];

这给了你一个指向Transaction对象数组的指针。

trans[currentnum] = new Transaction(balance, amt);

这试图在你的数组中分配一个Transaction对象,但是new Transaction(...)调用返回一个指针Transaction,指针不是数组的数据元素类型,所以这不会编译。

你可以说:

trans[currentnum] = Transaction(balance, amt);

或者,你可以这样做:

Transaction** trans = new (Transaction*)[MAX_NUM];
trans[currentnum] = new Transaction(balance, amt);

但几乎可以肯定的是使用:

std::vector<Transaction> trans(MAX_NUM);

如果你真的必须有MAX_NUM默认构造的元素,或者更好的是…

std::vector<Transaction> trans;

然后是.push_back(Transaction(balance,amt)),所以你基本上不用担心任何MAX_NUM或者索引离开容器的末端。如果你有一个c++ 11编译器,你可以使用.emplace_back(balance, amt)来获得更好的性能和直接在容器内构造Transaction对象。

std::vector代替:

std::vector<Transaction> trans;
trans.reserve(MAX_NUM);

addtrans基本可以简化为:

trans.emplace_back(balance, amt);