【问题标题】:How to instantiate instance variable without copy constructor and assignment operator如何在没有复制构造函数和赋值运算符的情况下实例化实例变量
【发布时间】:2016-02-23 08:09:37
【问题描述】:

我正在使用一个类库,该类没有实现赋值运算符,并且复制构造函数被禁用。我可以像这样实例化一个名为 varLibraryClass 的本地实例:

LibraryClass var(data, (char *)fileName, results);

但我想在我正在编写的类上创建一个LibraryClass 实例变量。然后我想在类构造函数中实例化它。像这样的:

class MyClass
{
    LibraryClass var;
    void MyClass();
}

MyClass::MyClass()
{
    var = LibraryClass(data, (char *)fileName, results);
}

在这种情况下,我结束了

error: ‘LibraryClass& LibraryClass::operator=(const LibraryClass&)’ is private
LibraryClass& operator=(const LibraryClass& rOther);  // no implementation

我已经尝试了所有我能想象到的方法来完成这项工作,但没有任何效果。我正在尝试做的事情甚至可能吗?我没有想法,因此非常感谢任何建议。

编辑

我实际上并没有在构造函数中实例化变量。它发生在一个单独的函数中。我只说构造函数是因为我错误地认为这只是一个简化的假设。我没有意识到初始化列表会解决这个问题。我要回答的主要问题是标题。

如何实例化没有复制构造函数或赋值运算符的类的实例变量?还是初始化列表是唯一的方法?

【问题讨论】:

  • 重复的太多了,我一个都找不到……
  • 我找不到任何重复项。也许您知道一些我不知道会导致重复的术语?
  • @juanchopanza 怎么样:stackoverflow.com/questions/926752/…
  • @LogicStuff 如果我知道“初始化列表的好处”是我可以创建一个没有复制构造函数或赋值运算符的类的实例变量,那我为什么会有发布了这个问题....?
  • 正是这种态度让 SO 成为了一个如此美妙的社区。 “不要问你非常有用的新手问题。相反,找一本书,梳理每句话寻找答案。SO 仅适用于专家问题。”

标签: c++


【解决方案1】:

你需要使用初始化列表。

【讨论】:

  • 不使用初始化列表是否可行,还是唯一的选择?
  • @Mike 我知道的唯一其他方法是使用动态分配的对象(例如,有一个LibraryClass* var; 数据成员,然后在初始化列表中执行var(new LibraryClass(...)) 或在正文中执行var = new LibraryClass(...); 但是,我不会使用动态分配,除非你需要并且此时你应该使用智能指针(例如,std::unique_ptr)。注意: 你应该更喜欢初始化列表而不是在构造函数的主体中执行赋值。
猜你喜欢
  • 2011-06-09
  • 1970-01-01
  • 2013-08-04
  • 2012-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-23
  • 2011-05-19
相关资源
最近更新 更多