"class myclass = Class()"会浪费资源吗?

3 c++ resources constructor

我有一节课:

class Cat {
   Cat();
   Tail longTail;
}
Run Code Online (Sandbox Code Playgroud)

我不确定为它编写构造函数的正确方法.我不想让longTail成为非相关原因的指针.

Cat::Cat() : longTail(length) {...} 
Run Code Online (Sandbox Code Playgroud)

那个不合适,因为长度是在构造函数中计算的,基于创建时的静态成员值; (上游不良做法);


问题是

Cat::Cat() 
{
   int length;
   ...
   longTail = Tail(length);
}
Run Code Online (Sandbox Code Playgroud)

Tail对象的创建和复制发生了多少次?它们对于创建和复制都是昂贵的CPU,我需要数千只猫.在我看来,这个构造函数首先在longTail中创建一个默认的Tail对象,然后在赋值的右边创建noname Tail对象,然后在longTail和noname Tail上运行operator = .我对吗?如果是,我该如何编写它以保留CPU?我再说一遍:longTail需要一个参数,它是在构造函数中计算的,我无法编辑Tail类.

Bjö*_*lex 8

在第二个版本中,您的Tail-object将在构造函数体运行之前进行默认初始化.在正文中,您创建第二个对象Tail并将其分配给第一个对象.

要在初始化列表中启用正确的构造,可以将参数的计算包装在静态成员函数中(因为,正如您所说,它仅取决于静态成员):

class Cat {
public:
    Cat() : longTail(calculateLength()) {...} 

private:
    static int calculateLength() {}
Run Code Online (Sandbox Code Playgroud)