我有一个类,它有一个对象数组作为它的实例变量。每个对象内部都包含int
和struct
。但不知何故,对象被解构了。
即
class AllInput {
public:
int numProducts;
Product * products;
public:
AllInput(int _numProducts, Product * _products);
};
class Product {
public:
int sellingPrice; //Ri
struct DemandDistribution observationDemand; //C2i
public:
Product(
LucyDecimal _sellingPrice, //Ri
LucyDecimal _costPriceAssmbly);
};
然后我有一个创建它的函数:
AllInput* in1() {
struct DemandDistribution * _observationDemand1 =
(DemandDistribution*) malloc(sizeof(DemandDistribution));
// set values
Product * product1 = new Product(165,_observationDemand1);
//initialize product2, product3, product4
Product products[4] = { *product1, * product2, *product3, *product4};
AllInput* all = new AllInput(4, products);
return all;
}
当我做AllInput* in = in1()
时。一旦执行,我就会看到4个中的每个产品都被解构(感谢产品的解构器中的print语句)。我遗失了什么?
PS:我需要使用指针而不是引用,因为我需要将其复制到cuda内存。
答案 0 :(得分:6)
你在堆栈上声明了Product products[4]
,所以当它扩展时会被释放(离开函数)
Product products[4] = { *product1, * product2, *product3, *product4};
AllInput* all = new AllInput(4, products);
构建动态分配的AllInput
时,如果您不将产品复制到AllInputs
的内部成员中,则在离开函数in1
时,products
将被释放保存在AllInput
中的指针将指向垃圾。
因此,也要为products
创建动态分配,或者复制AllInput
中的所有数据(指针数组)。