小编Lea*_*ner的帖子

c ++中的最终类

class Temp
{
private:
    ~Temp() {}
    friend class Final;
};

class Final : virtual public Temp
{
public:
     void fun()
     {
         cout<<"In base";
     }
};

class Derived : public Final
{
};

void main()
{
    Derived obj;
    obj.fun();
}
Run Code Online (Sandbox Code Playgroud)

上面的代码试图实现不可继承的类(final).但是使用上面的代码仍然可以创建派生的对象,为什么呢?

只有当ctor私有化时才能实现所需的功能,我的问题是为什么在dtor私有的情况下无法实现?

c++ inheritance final virtual-inheritance

13
推荐指数
5
解决办法
2万
查看次数

使用特定于类的set_new_handler

对于特定于类的new_handler实现,我在"有效的c ++"一书中遇到了以下示例.这看起来在多线程环境中存在问题,我的问题是如何在多线程环境中实现类特定的new_handler?

void * X::operator new(size_t size)
{
    new_handler globalHandler =                // install X's
    std::set_new_handler(currentHandler);    // handler
    void *memory;
    try {                                      // attempt
        memory = ::operator new(size);           // allocation
    }
    catch (std::bad_alloc&) {                  // restore
        std::set_new_handler(globalHandler);     // handler;
        throw;                                   // propagate
    }                                          // exception
    std::set_new_handler(globalHandler);       // restore
                                               // handler
    return memory;
}
Run Code Online (Sandbox Code Playgroud)

c++ multithreading operator-overloading new-operator

9
推荐指数
1
解决办法
1797
查看次数

谁在虚拟继承中调用构造函数?

#include<iostream>

class base{
public:
base(){std::cout<<"In base";}
};

class dv1:virtual private base {
public:
dv1(){std::cout<<"In DV1";}
};

class dv2:virtual private base {
public:
dv2(){std::cout<<"In DV2";}
};

class drv : public dv1, public dv2 {
public:
drv() {std::cout<<"Why is this working";}
};

int main() {
drv obj;

return 0;
}
Run Code Online (Sandbox Code Playgroud)

不是在虚拟继承的情况下,调用构造函数是大多数派生类的责任吗?注意:这里基地是虚拟和私下继承的.

c++ virtual object multiple-inheritance vtable

4
推荐指数
1
解决办法
1328
查看次数

Bad Re-throw编译但在运行时崩溃

以下代码将编译但在运行时崩溃:

int main() {

    try {
        throw;
    }
    catch(...){
        cout<<"In catch";
    }
     return 0;

}
Run Code Online (Sandbox Code Playgroud)

结果:"hello.exe中0x7c812a5b处的未处理异常:Microsoft C++异常:[rethrow] @ 0x00000000"

为什么编译器允许代码编译?编译器检查此代码是否是catch块的一部分看起来不是那么困难.

c++ exception

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