相关疑难解决方法(0)

为什么C++没有垃圾收集器?

我不是问这个问题,因为垃圾收集的优点首先.我提出这个问题的主要原因是我知道Bjarne Stroustrup已经说过C++在某些时候会有一个垃圾收集器.

话虽如此,为什么还没有添加?已经有一些垃圾收集器用于C++.这只是那些"说起来容易做起来难"的事情吗?还是有其他原因没有添加(并且不会在C++ 11中添加)?

交叉链接:

为了澄清,我理解为什么C++在第一次创建时没有垃圾收集器的原因.我想知道为什么收藏家不能加入.

c++ garbage-collection c++11

258
推荐指数
11
解决办法
15万
查看次数

std :: unique_ptr怎么没有大小开销?

如果一个空类的大小不能为0,那么std :: tuple有什么神奇之处所以unique_ptr的sizeof在64位机器中返回8?

在unique_ptr中,成员定义为:

  typedef std::tuple<typename _Pointer::type, _Dp>  __tuple_type;                 
  __tuple_type  _M_t;
Run Code Online (Sandbox Code Playgroud)

其中_Dp是删除类.

编译器是gcc版本4.7.1(Debian 4.7.1-7)

c++ c++11

36
推荐指数
2
解决办法
8759
查看次数

为什么不通过右值引用接受 std::unique_ptr ?

有人可以解释为什么每个人都std::unique_ptr按值传递而不是按右值引用传递吗?

据我观察,这需要调用额外的移动构造函数。

这是一个持有“指针”的类的示例。需要 3 个 move-ctor 调用才能按值获取它,而需要 2 个调用才能按引用获取它:

#include <memory>
#include <iostream>

class pointer {
public:
    pointer()
    { std::cerr << "ctor" << std::endl; }
    
    pointer(const pointer&)
    { std::cerr << "copy-ctor" << std::endl; }
    
    pointer& operator=(const pointer&)
    { std::cerr << "copy-assignment" << std::endl; return *this; }
    
    pointer(pointer&&)
    { std::cerr << "move-ctor" << std::endl; }
    
    pointer& operator=(pointer&&)
    { std::cerr << "move-assignment" << std::endl; return *this; }
    
    ~pointer()
    { std::cerr << "dtor" << std::endl; }
};

class A {
public: …
Run Code Online (Sandbox Code Playgroud)

c++

6
推荐指数
2
解决办法
2468
查看次数

为什么gcc将8字节格式的char类型传递给函数汇编

为了学习汇编,我正在查看GCC使用-S命令为一些简单的c程序生成的汇编.我有一个add函数,它接受一些int和一些char并将它们加在一起.我只是想知道为什么char参数被压缩到8个字节(pushq)?为什么不只推一个字节?

    .file   "test.c"
    .text
    .globl  add
    .type   add, @function
add:
.LFB0:
    .cfi_startproc
    pushq   %rbp
    .cfi_def_cfa_offset 16
    .cfi_offset 6, -16
    movq    %rsp, %rbp
    .cfi_def_cfa_register 6
    movl    %edi, -4(%rbp)
    movl    %esi, -8(%rbp)
    movl    %edx, -12(%rbp)
    movl    %ecx, -16(%rbp)
    movl    %r8d, -20(%rbp)
    movl    %r9d, -24(%rbp)
    movl    16(%rbp), %ecx
    movl    24(%rbp), %edx
    movl    32(%rbp), %eax
    movb    %cl, -28(%rbp)
    movb    %dl, -32(%rbp)
    movb    %al, -36(%rbp)
    movl    -4(%rbp), %edx
    movl    -8(%rbp), %eax
    addl    %eax, %edx
    movl    -12(%rbp), %eax
    addl    %eax, %edx
    movl    -16(%rbp), %eax
    addl    %eax, …
Run Code Online (Sandbox Code Playgroud)

c assembly gcc x86-64

5
推荐指数
2
解决办法
424
查看次数

标签 统计

c++ ×3

c++11 ×2

assembly ×1

c ×1

garbage-collection ×1

gcc ×1

x86-64 ×1