我创建了一个小型C库,它实现了图形理论算法,并将它们绑定在Python中使用.
我把它寄给朋友检查,他告诉我这va_list是"危险的",不能用于这种项目.
所以问题是.在哪些情况下va_list应该使用?
g ++(Ubuntu 4.4.3-4ubuntu5)4.4.3.编辑清晰.
我有一个共享库,我想在第一次加载时做一些事情,并且每当没有更多的引用时.
我尝试了两种方法,结果相同.第一个是使用此链接的建议.第二种方法是在库中创建一个类的全局实例.
每个都是一样的.然后我构建了一个测试程序,该程序使用库和fork()关闭进程.事实证明构造函数只被调用一次,但析构函数被调用两次 - 每个进程一次.
这是共享库和fork()的预期行为,还是我在这里做错了什么?让dtors调用每个进程并且ctor只调用一次似乎非常危险.
共享库(g ++ -fPIC -c -o myshare.o myshare.cpp/g ++ -shared -o libmyshare.so myshare.o):
class SharedMemAccess
{
public:
SharedMemAccess();
~SharedMemAccess();
};
static SharedMemAccess g_sharedMem;
SharedMemAccess::SharedMemAccess()
{
LOGDEBUG("Constructor\n");return;
}
SharedMemAccess::~SharedMemAccess()
{
LOGDEBUG("Destructor\n");return;
}
Run Code Online (Sandbox Code Playgroud)
测试驱动程序(g ++ -c -o main.o main.cpp/g ++ main.o -lmyshare -o test):
int main()
{
LOGDEBUG("In main\n");
pid_t rc = fork();
if (rc == -1) LOGDEBUG("fork failed\n");
else if (rc == 0) ChildProcess();
else ParentProcess();
return 0;
}
void ChildProcess() …Run Code Online (Sandbox Code Playgroud) 理解类结构中的变量范围有些困难.
我想在类构造函数中创建一些变量,然后让它们可用于该类中的函数.我认为只在构造函数中定义它们会起作用,但是我的编译器(g ++)给了我一个错误:'foo'没有在这个范围内声明.
有人可以解释这个微不足道的问题吗?
这里有一些虚拟代码来说明我正在尝试做什么.
myClass.h
using namespace std;
class myClass{
public:
myClass(){
std::vector<int> foo;
foo.resize(10,0);
};
void myFunc();
}
myClass.cpp
void myClass::myFunc(){
std::cout << foo[1] << end;
// etc...
}
Run Code Online (Sandbox Code Playgroud)