C++,我可以在构建器模式中使用默认构造函数吗?请检查我的问题和我的解决方案

C++, Can I use default constructor in builder pattern? Please check my problem and my solution

class Email
{
public:
  //Email(){} //If I added this, this problem is resolved. But I am not sure this is good solution.
  Email(EmailBuilder builder){
     ...
  }

  public class EmailBuilder {
     EmailBuilder() {...};
     EmailBuilder SetAddress(...) {...};
     EmailBuilder SetSubject(...) {...};
     EmailBuilder SetBody(...) {...};
     Email Build() {...};
  }
};  

class EmailSender
    {
    public:
       ...
       SendEmail(const Email& mail)
       {
           mEmail = mail;           }
    private:
       Email mEmail; //error : emailsender.h(8): error C2512: 'Email': no appropriate default constructor available
    }


    int main()
    {
        Email mail = new Email.Builder
                            .SetAddress("me@mail.com")
                            .SetSubject("C++ builders")
                            .SetBody("I like this API, don't you?")
                            .Build();
        ...
        EmailSender emailSender;
        ...
        emailSender.SendEmail(mail);
        ...
    }

这只是伪代码。

我想复制参数(=mail)到本地对象(=mEmail)。

但是我做不到。

如果我添加了默认构造函数(Email(){}),这个问题就解决了。但我不确定这是不是好的解决方案。

你能给我更多好的解决方案吗?

您的 EmailSender class 包含一个名为 mEmailEmail 对象。这个mEmail对象当然需要初始化(构造)。

问题是mEmail需要在之前构造EmailSender构造函数的主体运行,编译器只能默认构造它使用不存在的默认构造函数,导致你的错误。

解决方法是在EmailSender构造函数初始化列表:

中显式初始化(​​构造)mEmail
EmailSender(Email const& email)
    : mEmail{ email }  // Initialize (construct) using the copy-constructor
{
    // Empty body
}