Iは、DLLまたは共有オブジェクトが、オブジェクトのforeignObject生成MYDLL:インターフェイスでdll/soを介して注入されたクラスで例外を使用するのは安全ですか?
class ForeignObject : public LocalInterface {
virtual void some_func(Injector& i) {
i.inject();
}
};
は、このようになります。
class Injector {
virtual void inject() = 0;
};
class LocalInterface {
virtual void some_func(Injector& i) = 0;
};
その後、私は次のようにします。が、それはこのような例外をスローする安全/安全ではないである理由
class MyInjector : public Injector {
virtual void inject() {throw std::runtime_error("arrgghh");}
};
int main() {
LocalInterface* foreign_obj = create_object_from_my_dll();
MyInjector injector;
foreign_obj->some_func(injector);
destroy_object_from_my_dll(foreign_obj);
return 0;
}
私の質問は、です。同じコンパイラでビルドすると安全ですか?コンパイラ間?
あなたはOSに依存していると言いますが、Linuxのすべてのコンパイラは同じABI(g ++ <3.2を除く)に従っていますか? – daramarak
gccとclangの両方が標準ABIであるItanium C++ ABI(cf. http://sourcery.mentor.com/public/cxx-abi/abi.html参照)を使用しているようです。したがって、C++コンパイラがこのABIを使用しているかどうか、またはそれを使用するように構成できるかどうかを確認する必要があります。しかし、存在する唯一のABIではないので、すべてのC++コンパイラがLinux上で同じABIを使用するかどうかを確認することはできません。 – PierreBdR
@daramarakたとえば、clangはgccと同じItanium ABIを使用しています。したがって、問題なくコードをコンパイルすることができます。 – PierreBdR