小编Joe*_*ish的帖子

在哪些情况下应使用va_list

我创建了一个小型C库,它实现了图形理论算法,并将它们绑定在Python中使用.

我把它寄给朋友检查,他告诉我这va_list是"危险的",不能用于这种项目.

所以问题是.在哪些情况下va_list应该使用?

c variadic-functions

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

共享库,对象构造函数和fork()行为

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)

c++ linux fork shared

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

在构造函数中创建变量

理解类结构中的变量范围有些困难.

我想在类构造函数中创建一些变量,然后让它们可用于该类中的函数.我认为只在构造函数中定义它们会起作用,但是我的编译器(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)

c++ scope class

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

标签 统计

c++ ×2

c ×1

class ×1

fork ×1

linux ×1

scope ×1

shared ×1

variadic-functions ×1