gpt4 book ai didi

c++ - 在 C++ : invalid conversion from ‘void*’ to ‘uv_loop_t* 中避免 malloc

转载 作者:行者123 更新时间:2023-11-30 01:09:38 26 4
gpt4 key购买 nike

我正在尝试通过在其文档的帮助下创建小程序来学习 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 作为输出文件,但它失败了错误-

invalid conversion from ‘void*’ to ‘uv_loop_t* {aka uv_loop_s*}

指向 malloc 的使用。我通过用旧的 libuv 方式替换这些行来确认它 -

uv_loop_t* loop = uv_loop_new();
...
uv_loop_delete(loop);

这不应该工作,但令人惊讶的是,在这里工作并编译得很好。

但我认为与其回避这个问题,不如用 c++ 的好方法来解决这个问题。所以在这里,我要求在 C++ 中找到一个好的替代方案(可能没有 malloc/手动内存管理),以便我可以进一步进行。

最佳答案

在 C 中,void*malloc 的返回类型,隐式转换为任何其他数据指针类型。

在 C++ 中它没有。

C 也有隐含的 int,这意味着使用 malloc 的最佳实践因语言而异。在 C 中,不应转换结果,因为如果缺少 #include,这可能会隐式声明 mallocint 结果。但是,在 C++ 中,如果结果用作 void* 以外的任何内容,则必须强制转换结果。

你的代码

#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;
}

...更好地表达为

#include <iostream>
#include <uv.h>

int main() {
uv_loop_t loop;
uv_loop_init(&loop);

std::cout << "Running loop" << std::endl;
uv_run(&loop, UV_RUN_DEFAULT);

uv_loop_close(&loop);
}

关于c++ - 在 C++ : invalid conversion from ‘void*’ to ‘uv_loop_t* 中避免 malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39934158/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com