手动对象构造函数调用

时间:2011-05-17 13:27:08

标签: c++ class visual-c++ gcc constructor

是否可以告诉我是否可以手动调用对象构造函数?我知道这是错的,我不会在我自己的代码中做类似的事情,我知道我可以通过创建和调用初始化函数来解决这个问题,但问题是我偶然发现了一个存在数千行代码的情况。对象及其父母的构造函数......

class MyClass()
{
    MyClass() { }
    virtual ~MyClass();

    void reset()
    {
         this->~MyClass();
         this->MyClass::MyClass(); //error: Invalid use of MyClass
    }
};

3 个答案:

答案 0 :(得分:5)

您仍然可以将构造/销毁移动到单独的函数中并直接调用它们。即。

class MyClass {
public:
    MyClass() { construct(); }
    ~MyClass() { destruct(); }

    void reset() {
        destruct();
        construct();
    }

private:
    void construct() {
        // lots of code
    }

    void destruct() {
        // lots of code
    }
};

答案 1 :(得分:3)

您可以使用展示位置新语法:

this->~MyClass(); // destroy
new(this) CMyClass(); // construct at the same address

答案 2 :(得分:2)

使用placement new

调用构造函数
new (address) MyClass();

这在地址空白空间构造一个MyClass。

虽然不会在课程里面这样做!

修改
如果您已经有一个正确类型的对象,并且想要为其分配默认值,则可以选择

*this = MyClass();

创建一个具有默认值的新对象,并将该值分配给现有对象。