gpt4 book ai didi

c++ - 将参数传递给使用 new 运算符创建的对象?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:00:49 26 4
gpt4 key购买 nike

我有一个小的 C++ 问题,我不知道最好的解决方案。我有两个类 A 和 B,如下所示:

class A {
int n;
B* b;
public:
A(int num): n(num) {
b = new B[n];

for (int i = 0; i < n; i++) {
b[i].setRef(this);
}
}

~A() {
delete [] b;
}
};


class B {
A* a;
public:
B() { }

B(A* aref) {
a = aref;
}

void setRef(A* aref) {
a = aref;
}
};

我通过将要创建的 B 类对象的数量传递给它的构造函数来创建 A 类对象。我希望 B 类的每个对象都包含一个指向创建它的 A 类对象的指针。我认为最好的方法是将指向 A 类对象的指针作为构造函数参数传递给 B 类对象。

但是,由于我使用的是 new 运算符,因此会调用类 B 的无参数构造函数。因此,我在这里看到的唯一解决方案是在使用 new 运算符构造 B 类的每个对象后调用 setRef(A*) 方法。

是否有更适用于此的更好的解决方案/设计模式?对 B 类使用放置 new 会是更好的解决方案吗?

预先感谢您的帮助。

最佳答案

1) 使用 vector 而不是内存管理的内存。使用以下 vector 构造函数创建 B 对象。这是 native 数组中的已知限制:

A(std::size_t num): b_vec(num, B(this)), n(num) { }

因为您不需要 B 的深拷贝构造函数,所以默认的构造函数就可以了。请记住,无法使用某个值的重复拷贝来构造数组。

2) 使用placement new ,但这只是解决错误的问题恕我直言。除非您需要为数组的不同对象调用不同的构造函数。

关于c++ - 将参数传递给使用 new 运算符创建的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2511652/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com