小编Fra*_*fer的帖子

发生了什么:C ++ std :: move on std :: shared_ptr增加了use_count?

我一直假设std::move()a上会std::shared_ptr窃取指针并将原始指针设置为nullptr-从而不增加引用计数。在我的世界中似乎并非如此。

设置

MacOS,g ++ -version =>“ Apple LLVM版本10.0.1(clang-1001.0.46.3)”

代码

#include <cstdio>                                                                                                                                                                                  
#include <memory>
class Thing { public: Thing(int N) : value(N) {} int value; };

void print(const char* name, std::shared_ptr<Thing>& sp)
{ printf("%s: { use_count=%i; }\n", name, (int)sp.use_count()); }

int main(int argc, char** argv) {
    std::shared_ptr<Thing>  x(new Thing(4711));
    print("BEFORE x", x);
    std::shared_ptr<Thing>  y = std::move(x);
    y->value = 4712;
    print(" AFTER x", x);
    print(" AFTER y", y);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出

编译( …

c++ macos shared-ptr rvalue-reference

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

任何人都可以报告HWUT的单元测试经验吗?

  • 任何人都可以报告使用该HWUT工具(http://hwut.sourceforge.net)的经验吗?
  • 有没有人有更长时间的经历?
  • 坚固性怎么样?
  • 测试生成,状态机行走和Makefile生成等功能是否有用?
  • 执行速度怎么样?有没有大型项目的经验?
  • 代码覆盖率测量的表现如何?

c unit-testing

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

sympy - 符号数量的元素的符号总和

在“sympy”中表达以下内容的最合适方式是什么:

对样本 'x[i]' 的总和,其中 'i' 从具体的 0 到符号的 'N'。'x[i]' 本身应该是象征性的,即总是作为变量出现。

目标是在线性方程组中使用这些表达式。

示例(平凡最小二乘近似):

给定一组样本 (x[i], y[i]),它们应该位于由 'y = m*x + a' 给出的一条线上。即,估计线由“m”和“a”确定。样本和估计线之间的误差可以由下式给出

 error(m, a) = sum((m * x[i] + a - y[i])**2, start_i=0, end_i=N)
Run Code Online (Sandbox Code Playgroud)

现在,在导数 'd/dm error(m,a)' 和 'd/da error(m,a)' 中搜索零转换提供了最小距离。我怎样才能找到 sympy 的解决方案?

linear-equation symbolic-math sympy

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

valgrind、gcc 6.2.0 和“-fsanitize=address”

最近,当使用 '-fsanitize=address' 编译时,我在使用 valgrind 运行应用程序时遇到执行异常,即

“ASan 运行时不会出现在初始库列表中”

我有点不知道 valgrind 实际上做了什么。命令“ldd file.exe”提供

    linux-gate.so.1 =>  (0xb7755000)
    libasan.so.3 => /usr/lib/i386-linux-gnu/libasan.so.3 (0xb7199000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb6fdf000)
    libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb6fd8000)
    librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xb6fcf000)
    libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb6fb2000)
    libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb6f5c000)
    /lib/ld-linux.so.2 (0x80092000)
    libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb6f3e000)
Run Code Online (Sandbox Code Playgroud)

任何提示?

gcc valgrind address-sanitizer

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

sympy 版本 1.1.1:“solve()”包含“summation()”

我将如何求解包含求和表达式的方程,即类似的东西。

简单方程

我会考虑使用以下代码片段来求解这个方程:

from sympy import *

i, N, x = symbols("n, N, x")
y       = Function("y")
eq      = summation(x + y(i), (i, 0, N)) 

print solve(eq, [x])
Run Code Online (Sandbox Code Playgroud)

然而,虽然这个方程很简单,但solve()并不能产生结果。预期的解决方案是

在此输入图像描述

python sympy equation-solving

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

如何在运行时检测C++对象指向vtable的指针的修改?

令 vptr 为指向 vtable 的指针,该 vtable 随其类受虚拟函数约束的对象一起携带。

“vptr”的改变可能不是预期的行为。然而,这种更改不能被检测为非法内存访问,因为指针位于已分配内存的边界内。据我所知,“Efence”和“valgrind/memcheck”不会有帮助。

然而,意外的 vptr 更改可能会导致严重的问题。如果 vptr 被更改为指向任意内存,则删除运算符可能会立即导致分段错误。

是否有任何东西可以在 vtable 或指向 vtable 的指针上设置“守卫”,以便监视任何更改?

Clang++ 似乎并没有完成全部工作。给定

#include <string.h>
#include <stdio.h>
struct X { virtual ~X() {} };
int main(int argc, char** argv)
{
    X x;
    memset((void*)&x, 0, sizeof(X));
    printf("<before exit>\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译并执行...

> clang++ -fsanitize=undefined -fsanitize=vptr tmp.cpp -o test
> ./test
Run Code Online (Sandbox Code Playgroud)

在调用“virtual ~X()”时检测违规行为。

<before exit>
<unknown>: runtime error: member call on address 0xbfe30ab8 which does not point to an object of type 'X' …
Run Code Online (Sandbox Code Playgroud)

c++ gdb valgrind vtable address-sanitizer

5
推荐指数
0
解决办法
1032
查看次数

__contains__ 和 Python3.8 enum.Enum

设置:Python 3.8.2;一些带有重载__contains__()函数的枚举类。

  from enum import Enum
  
  class Something(Enum):
      A = 1
      def __contains__(self, Other):
          return Other in self.__class__.__members__.keys()
Run Code Online (Sandbox Code Playgroud)

测试 1:使用枚举本身的值。

  print("A:", Something.A in Something)
Run Code Online (Sandbox Code Playgroud)

工作正常(这里结果= A: True)。

测试 2:使用非枚举值。

  print("1:", 1 in Something)
Run Code Online (Sandbox Code Playgroud)

失败但有异常,即

  TypeError: unsupported operand type(s) for 'in': 'int' and 'EnumMeta'
Run Code Online (Sandbox Code Playgroud)

问题

如何实现in左操作数可以是任何内容的功能(成员运算符)?也就是说,应该可以写类似的东西

if anything in Something:
    ...
Run Code Online (Sandbox Code Playgroud)

无需检查 的类型anything

python enums

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

确定矩阵是否为单位矩阵(numpy)

确定给定矩阵“ M”是否等于同一性的最佳方法是什么?即类似:

if numpy.identity(3) == M:
     ...
Run Code Online (Sandbox Code Playgroud)

python arrays numpy matrix numpy-ndarray

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

CMake:如何从函数内部修改变量

从 CMake 函数内部修改调用者变量的最佳实践是什么?认为

function(MyFunction IN_OUT_NAME)

   ... what to do here ...

   string(APPEND ${IN_OUT_NAME} " and that")

   ... what to do here ...

endfunction()
Run Code Online (Sandbox Code Playgroud)

需要做什么才能使以下代码片段

set(MY_MESSAGE "this")
MyFunction(MY_MESSAGE)
message(${MY_MESSAGE})
Run Code Online (Sandbox Code Playgroud)

交付

this and that
Run Code Online (Sandbox Code Playgroud)

不重复的评论:

function cmake

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

Bash 如何在命名管道中写入/读取而不在第一次发送后中止

鉴于:

Bash 命令行(终端 1):

 > mkfifo pipo
 > cat pipo
Run Code Online (Sandbox Code Playgroud)

Bash 命令行(终端 2):

 > echo -e "Hello World\nHi" > pipo
Run Code Online (Sandbox Code Playgroud)

结果:

(1 号航站楼)中的 bash 打印:

 Hello World
 Hi
Run Code Online (Sandbox Code Playgroud)

并中止。

问题:

我怎样才能实现它不中止,但允许发送另一个回显pipo

bash pipe mkfifo

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