混合语言 F77/C++:避免破坏C++实例
Mixed language F77/C++ : Avoid destruction of C++ instance
我需要将Fortran和C++混合在一起。我写过C++课。我能够调用公共函数C++这要归功于调用C++库的外部"C"函数。
此函数创建此C++类的一些实例。当这个函数结束时,我想将这些实例保留在内存中,以便在之后调用它们。但是销毁我的实例是自动调用的。
我不想将这些实例与 Fortran 一起使用,而是在其他包装的C++函数中使用它们。我不能使用iso_c_binding或任何Fortran 2003函数(不幸的是)。
您有什么简单的想法可以将实例保存在内存中吗?
提前谢谢。
如果要在
下次输入同一函数时再次访问相同的C++对象,则可以在函数中将它们声明为static
。这将使函数的每次调用共享同一组(静态)变量。
如果多个函数需要访问同一对象,则可以在命名空间范围(在任何函数或类之外)定义它们。访问对象的函数的所有调用都将共享相同的全局变量。
如果您不希望通过使它们全局或static
来隐式共享实例,最好的选择(无论如何是最好的选择)是在类周围编写一个 C 包装器,其中包含动态分配类实例的创建/销毁函数。例如:
// x.hpp
class X {
public:
X(int);
void foo();
};
// x_wrapper.h
extern "C" {
void* create_x(int arg);
void destroy_x(void* anX);
void x_foo(void* anX);
}
// x_wrapper.cpp
#include "x.hpp"
#include "x_wrapper.h"
void* create_x(int arg) {
return new X(arg);
}
void destroy_x(void* anX) {
X* self = (X*)anX;
delete self;
}
void x_foo(void* anX) {
X* self = (X*)anX;
return self->foo();
}
相关文章:
- 从C++实例化QML
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 如何在c++中为模板函数实例创建快捷方式
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 设计一个只能由特定类实例化的类(如果可能的话,通过make_unique)
- 如何创建一个空的全局类并在启动时实例化它
- 无法创建抽象类的实例
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 我收到以下错误:抛出'std::bad_alloc'实例后终止调用
- 建议在运行时将带有类实例的列表从c++导入qml
- 约束和显式模板实例化
- 通过实例理解std::move及其目的
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 正在生成未知类实例
- 从DLL中删除类的实例
- 在std::vector上存储带有模板的类实例
- 为什么创建友元类的实例会导致"undefined reference to"错误?