C++ c+中的内存重用+;?在构造函数中使用此指针的placement new

C++ c+中的内存重用+;?在构造函数中使用此指针的placement new,c++,inheritance,memory,multiple-inheritance,this-pointer,C++,Inheritance,Memory,Multiple Inheritance,This Pointer,我在测试中问了其中一个问题(输出)。我找了很多,但不明白为什么 #include <iostream> using namespace std; class building{ public: building() { cout<<"geek building"<<endl; } }; class house: public building{ public: house(){ cout

我在测试中问了其中一个问题(输出)。我找了很多,但不明白为什么

#include <iostream>
using namespace std;
class building{
  public:
    building()  {
    cout<<"geek building"<<endl;
  }
};
   

class house: public building{
  public: 
  house(){
    cout<<"geek house"<<endl;
  }
  house(string name){
    new (this) house();
    cout<<"geek house: string constructor"<<endl;
  }  
};

int main() 
{
  house h("geek");
  return 0;
}
根据n3337第3.8章(对象寿命):

程序可以通过重用对象占用的存储,或者通过显式调用具有非平凡析构函数的类类型的对象的析构函数,来结束任何对象的生存期。对于具有非平凡析构函数的类类型的对象,在重用或释放该对象占用的存储之前,程序不需要显式调用析构函数;但是,如果没有显式调用析构函数,或者如果没有使用删除表达式(5.3.5)来释放存储,则不应隐式调用析构函数,并且依赖于析构函数产生的副作用的任何程序都具有未定义的行为

我的代码提供以下输出:

geek building
geek building
geek house
geek house: string constructor
我有以下两个问题:

1)在活动对象的构造函数中使用新的指针是否合法。我知道,如果我们使用另一个指针(大小相同),而不是放置新的指针,就不会有问题。示例

new (p2) house;  //p2 is a pointer to class house (house  *p2)
1)根据上述文档,我的代码不应该出现错误,因为我在新(这个)房子之后再次重用旧对象; 但是旧对象的生命周期已经通过重用内存而结束

有人能解释为什么它没有给出错误吗?并解释输出。
非常感谢您的帮助。

您希望通过
新(这)房子
实现什么目标?“未定义的行为”意味着任何事情都可能发生:你的程序似乎在工作,或者发生了错误,或者你的整个计算机着火爆炸。如果您不想让您的计算机着火并爆炸,您应该尽一切努力避免未定义的行为。如果您想“调用”默认构造函数作为参数化构造函数的一部分,那么您应该使用构造函数初始值设定项列表,如
house(字符串名称):house(){cout@SamVarshavchik,但是这一行
新(这)房子
不应该给出一个错误。因为你目前正在使用内存。@SamVarshavchik一台在UB上爆炸的计算机甚至无法启动。@Someprogrammerdude我的观点完全相同。我们可以像你说的那样调用它
房子(字符串名称):房子(){COUNT您希望通过
新(这)房子
实现什么?“未定义的行为”意味着任何事情都有可能发生:你的程序似乎在工作,或者发生错误,或者你的整个计算机着火爆炸。如果你不想让你的计算机着火爆炸,你应该尽一切努力避免未定义的行为。如果你想“呼叫”默认构造函数作为参数化构造函数的一部分,那么您应该使用构造函数初始值设定项列表,如
house(字符串名称):house(){cout@SamVarshavchik,但此行不应该
new(this)house
给出一个错误。因为你目前正在使用内存。@SamVarshavchik一台在UB上爆炸的计算机甚至无法在启动中生存。@Someprogrammerdude我的观点完全相同。我们可以像你说的那样调用它
house(字符串名称):house(){cout
new (p2) house;  //p2 is a pointer to class house (house  *p2)