【发布时间】:2014-03-21 01:04:34
【问题描述】:
如何组合变长结构成语
struct Data
{
std::size_t size;
char data[];
};
使用 make_shared 习惯用法,它本质上做同样的事情,这样我就可以在一个包含引用计数结构头和结构数据的连续内存块上获得一个 shared_ptr。
即像
// allocate an extra 30 bytes for the data storage
shared_ptr<Data> ptr = allocate_shared<Data>( vls_allocator(30) );
【问题讨论】:
-
您正在使用 C++。只需为
Data定义一个构造函数,该构造函数接受为数组分配的大小,然后执行shared_ptr<Data> ptr = shared_ptr<Data>(new Data(30))。 C++ 中的struct仅表示class,默认为public,而不是成员的private。 -
注意灵活数组是一个扩展,我猜你使用的是 gcc 或 clang。
-
添加构造函数在这里没有任何作用。当构造函数被调用时,内存已经分配好了,做任何事情都为时已晚。
-
是的,灵活数组(感谢您提醒我的名字)是一个扩展,一个广泛可用且非常有用的扩展。
-
你不会简单地在实例化列表中进行分配吗? IE。
Data(size_t size):size(size), data(vls_allocator(size)){}?
标签: c++