c++ - C++ 中的类构造函数

标签 c++ constructor

我是c++的初学者,所以有很多事情我脑子里不太清楚。

我有这段代码需要编写,并在一个类中创建了一个构造函数。 但是,我不需要任何参数,因为我从构造函数内部 中读取文件流。所以我的问题是:

1.我可以做这样的构造函数吗:

class myClass {
private:
  string title;
  string organizer;
public:
  myClass() {
    title = stringRead();
    organizer = stringRead();
  }
}

其中 stringRead() 是我编写的用于从我的文件中读取的函数??

2.以后需要的时候怎么调用?我知道默认构造函数是这样调用的:

myClass A;
A = myClass();

是一样的吗?

3.如果我有一个指针,我如何再次调用构造函数?这似乎不应该是正确的......

myClass *B;
B = myClass();

提前致谢! =D

最佳答案

1) 这个构造函数可以工作,但你应该喜欢使用初始化列表(假设 stringRead() 不是 myClass

的成员函数)
class myClass {
private:
  string title;
  string organizer;
public:
  myClass() 
    : title(stringRead()),
      organizer(stringRead())
  { }
};

2) myClass A; 是你应该做的。您也可以使用 auto A = myClass();,在优化之后,这将是同一件事。如果不进行优化,将构造一个临时对象,然后 A 将从中构造,因此这不适用于不可移动的对象(您的对象是可移动的)

3) 如果你想使用裸指针那么你会使用

myClass *ptr = new myClass;
// bunch of code
delete ptr;

但是,您最好使用智能指针来控制其生命周期。这样你就不需要手动删除

std::unique_ptr<myClass> ptr(new myClass);

或 c++14 中的 make_unique

auto ptr = std::make_unique<myClass>();

如果您拥有共享所有权,当然可以使用 shared_ptr

关于c++ - C++ 中的类构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30685253/

相关文章:

c++ - 如何限制通过 cin 输入的字符数?

c++ - 复制/move 省略与显式删除的复制/move 构造函数

java - 有没有办法在 Kotlin 中继承构造函数?

c++ - 编译时间常数的确定

c++ - 当您在检索到的值的表达式上进行分支时,是否有像 `if (Value * value = getValue())` 这样的习语?

c++ - IMAGE_SECTION_HEADER的VirtualAddress和PointerToRawData的区别

c++ - 是否在目标平台上评估了 constexpr?

Perl,perl 构造函数中的@array

Java构造函数继承?

Javascript 构造函数行为