小编dbb*_*bbd的帖子

在C++中插入容器时如何处理不可复制的对象

我正在寻找处理不可复制对象的最佳实践.

我有一个互斥类,显然不应该是可复制的.我添加了一个私有拷贝构造函数来强制执行.

这破坏了代码 - 有些地方只需要修复,但我有一个通用的问题,一个类,使用互斥量作为数据成员,或通过继承,被插入到容器中.

这通常发生在容器初始化期间,因此互斥锁尚未初始化,因此可以,但没有复制构造函数它不起作用.更改容器以包含指针是不可接受的.

有什么建议吗?

c++ noncopyable

12
推荐指数
2
解决办法
8918
查看次数

如何在没有__thread的情况下创建pthread特定变量

我正在维护一个具有需要线程特定变量的函数的库.由于gcc 4.2中的错误,如果我在x中定义静态__thread; 当通过PERL中未命名的API调用库函数时,它会挂起.

我想使用pthread_key_create()定义线程局部变量,但是我需要在库中执行它,并且在创建线程时我没有得到任何特殊调用.

如何创建线程局部变量,只有它不存在?就像是

pthread_key_t   tlsKey = 0;
int x;

myfunc()
{
    if (pthread_key_t == 0){
        pthread_key_create(&tlsKey, NULL);
        pthread_setspecific(tlsKey, &x);
    }
    int& myx = pthread_getspecific(tlskey);
    if (myx == 0){
       myx=1;
       something_under_myx_lock();
       myx = 0;
    } else {
      cout << "locked in thread\n";
    }
Run Code Online (Sandbox Code Playgroud)

}

注意:如果你想知道,我需要在线程中锁定的原因是为了使这个函数信号安全,以及线程安全.

c++ pthreads

8
推荐指数
1
解决办法
1285
查看次数

在C++中优化类实例的内存布局

将应用程序从32位升级到64位会增加指针大小和对象的内存占用量.

我正在寻找尽可能减少对象内存占用的方法.对于POD结构,我转储结构的内存布局,以找出如何打包成员并减少编译器填充.

有没有办法找出非POD对象的内存布局,如类实例?我怎么能实现类包装类对象的东西?

谢谢,丹

c++ memory memory-alignment

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

为什么我不能保存rip的价值?

#include <stdint.h>
uint64_t rip;
int main()
{
    asm(
        "movq %%rip, %0\n" : "=m" (rip)
        );

    sleep(10);
}
Run Code Online (Sandbox Code Playgroud)

当我编译我得到

cc -m64    rip.c   -o rip
/tmp/ccwNbZi1.s: Assembler messages:
/tmp/ccwNbZi1.s:12: Error: suffix or operands invalid for `movq'
make: *** [rip] Error 1
Run Code Online (Sandbox Code Playgroud)

x86 assembly

6
推荐指数
1
解决办法
4185
查看次数

如何在Makefile本身中指定--no-print-directory

我想在没有通过递归make调用打开-w标志的情况下运行我的makefile.执行此操作的标志是make命令行上的--no-print-directory.

是否可以在makefile中指定该标志?

我打算让这个标志依赖于VERBOSE模式,也许是类似的东西

$(if $(VERBOSE),,MAKEFLAGS += no-print-directory))
Run Code Online (Sandbox Code Playgroud)

谢谢,丹

makefile gnu-make

5
推荐指数
1
解决办法
3473
查看次数

gdb宏确定调试程序的体系结构

我需要编写一些gdb宏,这些宏需要在32位和64位体系结构之间有所不同。我正在寻找一种在gdb中确定调试的可执行文件是32位还是64位的方法。

信息目标包括有关文件类型的信息

例如文件类型elf32-i386

但这嵌入在更长的输出中。

作为gdb宏的新手,我不知道如何处理该输出,或者不知道如何获得此输出。

请暂时没有python gdb。

gdb

5
推荐指数
1
解决办法
748
查看次数

我如何使用numeric_cast策略?

所以我有自己的uint64_t到uint32_t数字转换的政策

struct MyOverflowHandlerPolicy
{
    void operator() ( boost::numeric::range_check_result ) {
         std::cout << "MyOverflowHandlerPolicy called" << std::endl;
         throw boost::numeric::positive_overflow();
    };
} ;
Run Code Online (Sandbox Code Playgroud)

如何让它被boost :: numeric_cast使用?

c++ boost

5
推荐指数
1
解决办法
685
查看次数

有没有办法从别处的目录运行SL4A脚本?

sl4a的所有脚本都在/ sdcard/sl4a/scripts下

是否可以运行其他地方的脚本:

例如来自/ sdcard/dropbox/pyscripts [wink wink]

android sl4a

4
推荐指数
1
解决办法
2054
查看次数

c ++编译时断言

我正在使用一个可能很危险的宏:

#define REMAINDER(v, size) ((v) & (size -1))
Run Code Online (Sandbox Code Playgroud)

显然它假设大小是2的幂.

我想确保大小确实是2的幂,但在编译时.(在运行时测试很容易,但不是我想要的).

对我来说一个充分的测试就是大小总是一个常数(从不变量).

我会用BOOST_STATIC_ASSERT,但我无法弄清楚如何使用它来满足我的需要.

c++ boost assertions

3
推荐指数
2
解决办法
2104
查看次数

如何查找C++可执行文件的所有对象(类对象/结构)

有没有办法,可能使用nm或gdb,这将让我创建一个可执行文件包含的所有对象类型的列表?

为了澄清,我有源代码.我需要一种方法来计算运行时使用的所有类/结构大小.所以这可能是一个两部分问题:

  1. 创建所有类/结构的列表
  2. 在gdb中对列表中的每个项目使用sizeof().

c++ reverse-engineering

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