"新运营商"将另一个类实例化为工厂?

时间:2017-07-28 14:08:51

标签: c++ c++11 new-operator

我尝试使用#include <iostream> #include <string> using namespace std; int main(){ string str,rstr; int len,i=0; cin>>str; len = str.length(); while(str[i]!='\0'){ rstr[i++]=str[--len]; } rstr[str.length()]='\0'; cout<<rstr; return 0; } 运算符来实例化特定类,而不是new关键字后面的类。

我试着拥有一种&#34;工厂&#34;对于抽象类。

在我看来,这是不可能的,但让我们仔细检查! 此代码编译,但主代码将其视为new(而不是Test类)

TestImpl

1 个答案:

答案 0 :(得分:21)

请注意,对于每个new expression,将执行以下两项操作:

  1. 通过适当的operator new
  2. 分配内存
  3. 在步骤#1分配的内存上构造对象。
  4. 所以operator new只分配内存,不构造对象。这意味着,对于Test * t = new Test();,仍然会在由重载Test分配的内存上构建operator new;即使你在TestImpl内构建了一个operator new,但在operator new完成后,很快就会覆盖在同一个内存中。