如何为c ++程序分配内存

arv*_*ind 3 c++

考虑以下计划:

#include <string>
#include <iostream>

class B {
  private:
    std::string s;

  public:
    B() { s = fun(); }
    std::string fun() { return "hello"; }
    void print() {
        std::cout << s;
    }
};

int main(){
    B b;
    b.print();
}
Run Code Online (Sandbox Code Playgroud)

输出是 Hello

我的问题是:

  1. 在哪个序列中为数据成员分配内存(在本例中为's').
  2. 在构造函数中调用fun()时是否存在Object.

我怀疑的是我如何在b对象上调用一个尚未由构造函数创建的函数.

bip*_*pll 5

到目前为止,对象的构造函数体开始执行,所有对象的基础,直接或因此间接,以及成员已经被显式或隐式初始化.因此s,一个有效的字符串对象在法律上可以作为赋值的LHS.

这里应该注意的一件事是,如果从构造函数中调用多态类的虚方法,则选择此当前类型的实现,因为任何派生类型尚未初始化,因此其重载(如果有的话)将是非法的打电话.