在另一个构造函数中调用复制构造函数

时间:2012-03-19 10:50:40

标签: c++ placement-new

#include <stdlib.h>
#include <iostream>
#include <vector>
#include <string>
class A
{
public:
    std::string s;
    A()
    {
        s = "string";
        new(this)A(*this);
    }
};
int main()
{
    A a;
    std::cout<<a.s;
    return 0;
}

我在输出中得到空字符串。 C ++标准对这种行为有何看法?

2 个答案:

答案 0 :(得分:4)

这里必须至少有两个问题:

  • 您尝试使用自身副本
  • 初始化A.
  • 在构造函数中,A尚未完全构造,因此您无法真正复制它

更不用说new(this)本身就是可疑的。

答案 1 :(得分:0)

你通过这样做连续两次调用s的构造函数,因为行为是未定义的(很可能是某些内存被泄露)。