相关疑难解决方法(0)

C++ 11委托构造函数纯虚拟方法和函数调用 - 危险?

不是从构造函数调用虚函数和纯虚函数的重复:

前一个问题涉及C++ 03,而不是C++ 11中新的构造函数委派行为,并且该问题没有通过使用委托来确保在执行纯虚拟实现之前正确构造来解决未定义行为的问题.

在C++ 11中,在构造期间在类的构造函数中调用Pure Virtual函数有什么危险,但是在通过构造函数委托"完全构造"类/对象之后?

显然,在C++ 11规范的某个地方存在这样的约束,

可以为正在构造的对象调用成员函数(包括虚拟成员函数,10.3).类似地,正在构造的对象可以是typeid运算符的操作数. - [C++工作草案]的12.6.2#13(http://www.open-std.org/jtc1/sc22/wg21/docs/ papers/2011/n3242.pdf)找不到已发布规范的"合理使用"版本.

一旦任何构造函数完成执行,C++ 11就会考虑构造一个对象.由于将允许多个构造函数执行,这意味着每个委托构造函数将在其自己类型的完全构造的对象上执行.派生类构造函数将在其基类中的所有委托完成后执行.- 维基百科说这是C++ 11的事情.

实际C++ 11参考未知.

以下示例在Visual Studio 2012 C++编译器的Nov CTP中编译和运行RUNS:

#include <string>

/**************************************/
class Base
{
public:
    int sum;
    virtual int Do() = 0;

    void Initialize()
    {
        Do();
    }
    Base()
    {
    }
};

/**************************************/
// Optionally declare class as "final" to avoid
// issues with further sub-derivations.
class Derived final : public Base
{
public:

    virtual int Do() override final
    { …
Run Code Online (Sandbox Code Playgroud)

c++ constructor delegation pure-virtual c++11

14
推荐指数
2
解决办法
4184
查看次数

标签 统计

c++ ×1

c++11 ×1

constructor ×1

delegation ×1

pure-virtual ×1