【发布时间】:2017-02-17 10:50:14
【问题描述】:
我正在尝试通过借助它的文档创建小程序来学习 libuv。请注意,我将通过c++ 语言而不是c 使用它。这是我开始的 -
#include <iostream>
#include <uv.h>
int main() {
uv_loop_t *loop = malloc(sizeof(uv_loop_t));
uv_loop_init(loop);
std::cout << "Running loop" << std::endl;
uv_run(loop, UV_RUN_DEFAULT);
uv_loop_close(loop);
free(loop);
return 0;
}
并使用 - g++ -std=c++14 -luv main.cpp 编译它,它应该将 a.out 作为输出文件,但它失败并出现错误 -
从‘void*’到‘uv_loop_t* {aka uv_loop_s*}的无效转换
指向 malloc 的使用。我通过用旧的 libuv 方式替换这些行来确认它 -
uv_loop_t* loop = uv_loop_new();
...
uv_loop_delete(loop);
这不应该工作,但令人惊讶地工作和编译在这里很好。
但我认为与其回避这个问题,不如用 c++ 中的一个好方法来解决这个问题。所以在这里我要求在 c++ 中找到一个好的替代方案(可能没有 malloc/手动内存管理),以便我可以进一步进行。
【问题讨论】:
-
@LogicStuff 我在这里尽量避免使用 malloc,而不是尝试使用它,如有不便,敬请原谅。
-
为什么要使用动态内存?为什么不只是
uv_loop_t loop; uv_loop_init(&loop);? -
在c++中你应该使用
new -
@EdHeal 好吧,我应该使用 unique_ptr 但我不确定它是否不会炸毁我的系统。 /jk 我不知道怎么用。
标签: c++ c++11 pointers smart-pointers libuv