我正在使用zmq的本机C库编写我的应用程序(应用程序本身是用C++编写的)。ZMQ版本为4.04。我遇到的问题是,我有一个工厂类,它提供对zmq上下文的单例访问,这是zmq_ctx_new ()创建的一个空指针。zmq上下文本身存储为静态成员变量,并提供一个getter方法来访问对该变量的引用。类本身非常简单,下面是完整的代码:
zmq_ctx_factory.h
#include <zmq.h>
#include <cassert>
class ZmqCtxFactory
{
public:
static void* get_ctx()
{
assert (zmq_ctx_ != (void*) NULL);
return &zmq_ctx_;
}
static bool is_initialized()
{
return is_initialized_;
}
static void init()
{
zmq_ctx_ = zmq_ctx_new ();
is_initialized_ = true;
}
private:
static void* zmq_ctx_;
static bool is_initialized_;
};zmq_ctx_factory.cpp
#include "zmq_ctx_factory.h"
bool ZmqCtxFactory::is_initialized_ = false;
void* ZmqCtxFactory::zmq_ctx_ = NULL;这里有一个问题,在我的客户端代码中,下面会出现一个错误(错误代码14,坏地址)。
void* context = ZmqCtxFactory::get_ctx();
assert (context != (void*) NULL);
socket_ = zmq_socket (context, ZMQ_SUB);但是,如果我用ZmqCtxFactory::get_ctx();替换zmq_ctx_new ();,代码就能正常工作。如您所见,我有一个断言来确保上下文不是NULL,这意味着ctx变量已经成功创建。(根据文档,如果创建失败,zmq_ctx_new ()将返回NULL)。我很困惑,为什么工厂归还的推荐信不起作用?
发布于 2014-08-16 01:03:26
问题是static void* get_ctx()不返回引用,而是返回空指针的地址。将方法更改为下面的代码后,工作正常:
static void*& get_ctx()
{
assert (zmq_ctx_ != (void*) NULL);
return zmq_ctx_;
}https://stackoverflow.com/questions/25336018
复制相似问题