小编Ras*_*lis的帖子

使用 _aligned_malloc() 对 unique_ptr<> 进行 C++ 数据对齐

在将对象添加到数据结构之前,我试图确保对象对齐vector。响应警告warning C4316: 'Basic' : object allocated on the heap may not be aligned 16,我对该对象有以下内容Basic

class Basic
{
public:
    Basic();
    ~Basic();
};
Run Code Online (Sandbox Code Playgroud)

这是这里的标准对象。接下来,unique_ptr将a 分配给new的实例,Basic以获得这样做的好处。(与标准指针相反)

unique_ptr<Basic> e_Basic{new Basic()};
Run Code Online (Sandbox Code Playgroud)

我尝试对齐数据,以便以后可以避免对齐问题:

e_Basic.reset =_aligned_malloc((size_t)sizeof(Basic), (size_t)(16 + (sizeof(Basic) % 16))); //Verify alignment.
Run Code Online (Sandbox Code Playgroud)

最后将指针添加到vector数组中。

LocalBasicQueue.push_back(move(e_Basic));
Run Code Online (Sandbox Code Playgroud)

编译器说它是犹太洁食,但我的“胡扯什么?” 代码意识正在消失。这会导致指向(肯定)对齐代码的指针吗?

以这种方式声明( e_Basic.reset) 等于指针[由 ] 返回并调用它,分配新指针是否可以?_aligned_malloc()unique_ptr<>

c++ malloc vector memory-alignment unique-ptr

3
推荐指数
1
解决办法
1830
查看次数

html5中是否支持createElement()?

在编写HTML5页面(包括PHP)时,我注意到当doctype切换到html5时,createElement()停止工作

<!DOCTYPE html>
Run Code Online (Sandbox Code Playgroud)

代码是使用Javascript创建非常标准的元素:

function Rhit(){
        var Hit=document.createElement('div');
        if(Hit){
            alert('Hit assigned.');
            Hit.setAttribute('id','Hits');
            if(document.body.appendChild(Hit)){
                alert('Hit transferred to body; setting styles.');
                Hit.style.width='400';
                Hit.style.height='400';
                Hit.style.position='absolute';
                Hit.style.right='0';
                Hit.style.top='0';
                Hit.style.backgroundColor='#777777';
            }
        }
        else{
            alert('Create Element Error, please debug.');
        }

    }
Run Code Online (Sandbox Code Playgroud)

(我在html5 doc类型下调试了一下......有点.)警报弹出,但是在html5 doctype下没有绘制div标签.(使用常规html超级沙箱模式可以正常工作)

我错过了什么吗?

(此外,所有代码都显示在浏览器源代码中.)似乎代码正在解析但未绘制?

编辑:这是一个完整的演示.与此同时,我将这些评论添加到:

<html> <!--if !html5 document draws.-->
<head> 
 <script>
     function proc(){
        var foo=document.createElement('div');

        //Test foo creation.
        if(foo){
            alert('Hit assigned.'); 
            foo.setAttribute('id','Hits');

            //test foo location assignment.
            if(document.body.appendChild(foo)){

                alert('Hit transferred to body; setting styles.'); 

                //Set all other stuff.
                foo.style.width='400';
                foo.style.height='400';
                foo.style.position='absolute';
                foo.style.right='0';
                foo.style.top='0';
                foo.style.backgroundColor='#777777'; …
Run Code Online (Sandbox Code Playgroud)

javascript css browser html5 doctype

2
推荐指数
1
解决办法
283
查看次数

将结构体转换为数组

随着编程变得更加复杂,对结构数据执行操作的需求变得可见。是否有将结构类型转换为其成员数组的转换方法,以便:

struct FooDesc Foo{
    int num_Foo;
    int num_Bar;
    int GreenFoo;
};
Run Code Online (Sandbox Code Playgroud)

可以表示为:

int Bar[2];
Run Code Online (Sandbox Code Playgroud)

或者更好,动态为:

vector<int> Bar;
Run Code Online (Sandbox Code Playgroud)

目标是将数据结构转换或重新表示为可迭代形式,而不过度使用赋值运算符。

c++ arrays struct vector std

2
推荐指数
1
解决办法
1263
查看次数