返回二进制数据的通用方式,而无需原始指针
Generic way of returning binary data without raw pointers
我有3个类似的类(psuedocode(:
class Parent {
public:
virtual void * getData(size_t & size) = 0;
};
class A : public Parent {
public:
void * getData(size_t & size) {
size = sizeof(structA);
structA * a = new structA();
//fill er up
return (void *) a;
};
};
class B : public Parent {
public:
void * getData(size_t & size) {
size = sizeof(structB);
structB * b = new structB();
//fill er up
return (void *) b;
};
};
structA
和structB
是我无法修改的POD C结构(供应商提供(,因此我无法创建父并返回polymorphic unique_ptr。例如。
我的问题是:有没有一种方法可以让A类和B级返回其struct数据,而无需使用原始指针,因为我拥有的约束?
您可以将智能指针用于数据,即使您不将其放入多态性包装器中,例如:
class Parent
{
public:
using dataPtr = std::unique_ptr<void, void(*)(void*)>;
virtual dataPtr getData(size_t & size) = 0;
};
class A : public Parent
{
public:
dataPtr getData(size_t & size) override
{
size = sizeof(structA);
dataPtr a(new structA, [](void *data){ delete static_cast<structA*>(data); });
//fill er up
return std::move(a);
}
};
class B : public Parent
{
public:
dataPtr getData(size_t & size) override
{
size = sizeof(structB);
dataPtr b(new structB, [](void *data){ delete static_cast<structB*>(data); });
//fill er up
return std::move(b);
}
};
或:
class Parent
{
public:
using dataPtr = std::shared_ptr<void>;
virtual dataPtr getData(size_t & size) = 0;
};
class A : public Parent
{
public:
dataPtr getData(size_t & size) override
{
size = sizeof(structA);
dataPtr a(new structA, [](void *data){ delete static_cast<structA*>(data); });
//fill er up
return a;
}
};
class B : public Parent
{
public:
dataPtr getData(size_t & size) override
{
size = sizeof(structB);
dataPtr b(new structB, [](void *data){ delete static_cast<structB*>(data); });
//fill er up
return b;
}
};
实时演示
相关文章:
- 从堆栈分配的原始指针构造智能指针
- 将unique_ptr分配给原始指针
- 如何将唯一指针的 std::vector 转换为原始指针的 std::span?
- <Base> <Derived> 具有相同原始指针共享引用的 shared_ptr 和 shared_ptr 实例是否计数?
- C++原始指针和"delete"
- 为什么 C++ 地址中的矢量无法通过原始指针访问
- 如何正确实现具有原始指针的类的复制构造函数?
- 如何在将原始指针移动到基类构造函数之前从unique_ptr中提取原始指针
- 为包含原始指针的对象C++智能指针
- c++:复制、删除和运算符=在原始指针映射中
- C++模板,用于通过常量引用和原始指针传递向量
- C++为什么原始指针不会增加shared_ptr的引用计数?
- 从shared_ptr获取原始指针以将其传递给需要 raw 的函数
- 如何包装多级原始指针以赋予其容器语义
- 为什么我可以通过原始指针而不是shared_ptr来修改对象
- 将原始指针传递给接受unique_ptr作为参数的函数
- 为什么我们不允许将纯引用参数传递给 std::thread,但允许传递原始指针?
- 更改保留指向其字段的原始指针的对象地址
- 从原始指针(衰减的 C 样式数组)和大小生成范围::视图
- 如何在C++代码中灵活使用和替换标准::shared_ptr或标准::unique_ptr或原始指针?