gpt4 book ai didi

c++ - 常见的 C 模式,但用 C++ 表示?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:56:44 26 4
gpt4 key购买 nike

C 编程中的一个常见模式涉及可变长度结构,例如:

typedef struct {
int length;
char data[1];
} MyBuffer;

其中 data 并非字面上的 [1] 数组。相反,它的可变长度由 length 定义。

结构分配如下:

MyBuffer* pBuff = malloc(sizeof(MyBuffer) + 100);

我想使用相同的模式,但在 C++ 代码中,所以使用 new/delete 而不是 malloc/free

能否在 C++ 代码中使用相同的模式?怎么办?

编辑 由于有几个答案和评论建议我切换到 std::vector:

我从第 3 方 C 库中获得了结构定义 MyBuffer
在我的 C++ 应用程序中,我需要分配缓冲区并调用 C 库中的函数。

在边界的“我这边”,我更喜欢保留 C++,并以 C++ 的方式分配这个结构,但我仍然需要将它传递给一个 C 库,它不会理解像 std::vector 这样的东西。

最佳答案

如果您需要保持与您正在使用的现有 C 代码的兼容性,那么它可以与 C++ 一起工作,几乎没有变化(只需要转换 malloc() 的返回)。

#include <stdlib.h>

typedef struct {
int length;
char data[1];
} MyBuffer;

void f() {

MyBuffer* pBuff = (MyBuffer *)malloc(sizeof(MyBuffer) + 100);
}

使用 g++ 编译没有问题。

如果您担心管理分配给我的内存 malloc() 那么您可以创建一个类来管理它并通过成员方法公开 MyBuffer 指针,因为示例:

std::shared_ptr<MyBuffer> buf((MyBuffer *)malloc(sizeof(MyBuffer) + 100), free);

这很麻烦,我承认...

关于c++ - 常见的 C 模式,但用 C++ 表示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18661767/

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