- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
什么情况下_declspec( novtable )
会导致访问冲突?
例如,这段代码不会:
class __declspec(novtable) Base
{
public:
virtual ~Base() { };
virtual int Foo() const = 0;
virtual int Bar() const { return 2; };
};
class A : public Base
{
public:
int Foo() const { return 1; };
};
int main(int argc, char* argv[])
{
A a;
volatile int a1 = a.Foo();
volatile int a2 = a.Bar();
Base* c = new A();
volatile int c1 = c->Foo();
volatile int c2 = c->Bar();
delete c;
return 0;
}
这段代码也不会:
class __declspec(novtable) Base
{
public:
virtual ~Base() { };
};
int main(int argc, char* argv[])
{
Base a;
}
但是,这段代码将:
int main(int argc, char* argv[])
{
Base* a = new Base();
delete a; // access violation
}
为什么前两个示例中的代码没有在析构函数上抛出?
最佳答案
http://msdn.microsoft.com/en-us/library/k13k85ky%28v=vs.71%29.aspx
If you attempt to instantiate a class marked with novtable and then access a class member, you will receive an access violation (AV).
您遇到访问冲突的代码是您在 novtable 类上显式调用“删除”的代码。
关于c++ - _declspec( novtable ) 什么时候不安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9952532/
我们知道,novtable 表示不为纯抽象类创建虚表。但是当我运行代码时,出现了错误: #include using namespace std; struct A{ virtual voi
什么情况下_declspec( novtable )会导致访问冲突? 例如,这段代码不会: class __declspec(novtable) Base { public: virtual
我有一个 Visual Studio 2008 C++03 项目,其中有一个声明为 _declspec( novtable ) 的接口(interface)类。例如: class _declspec(
或者,使用 __declspec(novtable) 是否有任何其他已知的负面影响?我似乎找不到任何问题的引用。 最佳答案 MSCV 使用每个对象一个 vptr,每个类一个 vtbl 来实现 OO 机
因为CBase有纯虚函数,我不能创建它的实例。在这种情况下,如何通过“novtable”产生违规行为?如果没有办法这样做,'novtable' 是否应该应用于所有抽象类? 这段代码没有违规: stru
是否有与 Visual Studio 的 __declspec(novtable) 参数等效的 g++? 基本上,在纯虚拟基类中,__declspec(novtable) 参数可用于禁止为基类创建 v
我是一名优秀的程序员,十分优秀!