gpt4 book ai didi

c++ - 是否可以在 C++ 中的另一个类的构造函数中声明一个类的对象?

转载 作者:搜寻专家 更新时间:2023-10-31 00:20:03 25 4
gpt4 key购买 nike

在c++中是否可以在另一个类的构造函数中初始化一个类的对象?我通常只会在 main() 中声明对象,但是我很想知道这是否可行以及是否是一个好的做法。 "new"和没有"new"运算符的情况有什么含义。它在哪里被摧毁?

例如假设一个 namespace 和一个带有"new"运算符的示例

class A{
private:
protected:
int *w, int *h;
public:
A(){
w = new int;
h = new int;
};
virtual int area (return ((*w)*(*h)) ;)
virtual ~A()
{
delete w;
delete h;
}
}

class B{
public:
B()
{
A a1; // This is usually in the main();
// Is this good practice
//Where will the object be destroyed
}
virtual ~B();
}

最佳答案

关于您的实际问题,是的,这是非常好的做法(就在 B 的构造函数中声明 A 而言)。这将起作用并正确调用 A 的析构函数。

但是:关于您发布的代码片段,在 A 的构造函数中分配两个对象不是好的做法。如果 hoperator new 失败,则 w 将被泄漏。如果在其构造函数中抛出异常,则不会调用 A 的析构函数。因此,如果 new inth 抛出,w 将不会被删除。

关于c++ - 是否可以在 C++ 中的另一个类的构造函数中声明一个类的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6901640/

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