声明既没有默认构造函数也没有复制构造函数的成员变量

Posted

技术标签:

【中文标题】声明既没有默认构造函数也没有复制构造函数的成员变量【英文标题】:Declare member variables that do not have a default constructor nor a copy constructor 【发布时间】:2019-05-05 22:11:18 【问题描述】:

假设我有一个既没有默认构造函数也没有复制构造函数的类 Member,它是由第三方 API 创建的,就像函数一样。

我有声明

Member CreateMember(string str);

class MyClass 
    Member my_member;
public:
    MyClass()
       my_member = CreateMember("I am a parameter");
    

由于Member类没有默认构造函数,所以上面的声明不起作用,因为没有办法初始化成员。

我也不能将它声明为指针,因为缺少复制构造函数意味着我不能调用new Member(my_member)

我在这里不知所措,有什么建议吗?

【问题讨论】:

【参考方案1】:

使用member initializer lists:

Member CreateMember(string str);

class MyClass 
    Member my_member;
public:
    MyClass()
    : my_member(CreateMember("I am a parameter"))
    
    
;

【讨论】:

以上是关于声明既没有默认构造函数也没有复制构造函数的成员变量的主要内容,如果未能解决你的问题,请参考以下文章

请问java构造函数如何初始化成员变量的啊?

C++类的特殊成员-默认/拷贝/移动构造函数

c++ 隐式复制构造函数是不是复制数组成员变量? [复制]

两个特别的构造函数

explicit 构造函数

复制构造函数2——深入理解