gpt4 book ai didi

C++构造了一系列没有默认构造函数的相互依赖的类?

转载 作者:行者123 更新时间:2023-11-28 07:51:29 25 4
gpt4 key购买 nike

我有来自没有默认构造函数的外国库的类 A、B、C、D。

给定对象A。对象 D 是必需的。

我不会写

D makeD(A a) {
B b(1,2,3);
C c(a,b);
c.setParam1(4);
c.setParam2(5);
return D(a,b,c);
}

因为中间体B和C的销毁使得返回的D对象不可用(D 通过引用存储 B 和 C)。

这个问题的最短解决方案是什么?

一个丑陋且糟糕但简短的解决方案是:

D makeD(A a) {
B* b=new B(1,2,3);
C* c=new C(a,*b);
c->setParam1(4);
c->setParam2(5);
return D(a,*b,*c);
}

一个长解决方案是:

shared_ptr_xxl<D,B,C> makeD(A a) {
B* b=new B(1,2,3);
C* c=new C(a,*b);
c->setParam1(4);
c->setParam2(5);
return shared_ptr_xxl<D,B,C>(new D(a,*b,*c),b,c);
}

在哪里

shared_ptr_xxl<D,B,C> 

就像

shared_ptr<D> 

除了它有额外的有

delete b;
delete c;

在析构函数中。

最佳答案

创建一个包含它们的类:

class E {
public:
E(A const & a):
b(1, 2, 3),
c(make_c(a, b)),
d(a, b, c)
{
}
private:
static C make_c(A const & a, B const & b) {
C c(a, b);
c.setParam1(4);
c.setParam2(5);
return c;
}
A a;
B b;
C c;
D d;
};

关于C++构造了一系列没有默认构造函数的相互依赖的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13687942/

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