小编Che*_*ron的帖子

'&'需要l-value on&std :: unique_ptr <>.get

我正在尝试使用函数NuiCreateSensorByIndex(int,INuiSensor**).我试图不使用裸指针,所以我做std::unique_ptr<INuiSensor> nui;了一个unique_ptr.现在我想访问此函数,所以我执行以下操作:hr = NuiCreateSensorByIndex(i, &nui.get());,但这是错误的:

KinectManager.cpp:29: error: C2102: '&' requires l-value
Run Code Online (Sandbox Code Playgroud)

我做错了什么以及如何解决?

c++ lvalue unique-ptr

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

在CMake中运行install命令,但仅限于

我对CMake非常陌生,并且无法设置安装规则.我想在以下命令中运行以下命令make install:

update-rc.d solshare_stats_runscript defaults
Run Code Online (Sandbox Code Playgroud)

但是我只想在以下情况下运行此命令:

CMAKE_INSTALL_PREFIX="/"
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

cmake

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

使用<name> = ...不命名类型

目标是在模板对象中定义一个函数,其中void(void)作为原型.以下代码:

template <class T>
using ClassVoidFunctionPointer = void (T::*)(void);

class Scheduler {

public:
        Scheduler(void);
        ~Scheduler(void);
        template <class T>
        void addTask(unsigned short interval, unsigned short delay,T templateClass,ClassVoidFunctionPointer classFunctionPtr );//For newer functions
...
}
Run Code Online (Sandbox Code Playgroud)

这给了我错误:

inc/scheduler.h:18:77: error: 'ClassVoidFunctionPointer' is not a type
Run Code Online (Sandbox Code Playgroud)

为什么我会收到此错误?

c++ templates using

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

内存泄漏,无法找到源

我有一个很大的内存泄漏,我需要一些帮助来找出它来自哪里.首先,关于代码的一些理论:

这是一个Kinect项目.它是在MS Visual Studio 2012中构建的MFC项目,它使用Direct2D将图像放在屏幕上.当我从Kinect 1切换到Kinect 2时会发生此问题.然后重建除"主"对象之外的每个对象(解构/释放并置为NULL(如果指针)).这包括:

  • 所有Direct2D对象(工厂,Rendertargets,位图,画笔,一切)
  • 带线程的Kinect facetracker
  • 带线程的kinect对象.

对于每个新关键字,我在析构函数中使用了delete关键字(所以我没有做任何事情来破坏那些没有用new初始化的指针).我关闭了所有线程处理程序并将它们设置为NULL.

现在我有内存泄漏,我需要一些帮助找到它.我开始使用MS MFC工具

初始化后我有一些输出:

Dumping objects ->
{402} normal block at 0x1531E8F0, 28 bytes long.
 Data: <<       @       > 3C 07 06 00 F0 00 00 00 40 01 00 00 00 05 00 00 
{401} normal block at 0x152F6CD8, 96 bytes long.
 Data: <    >           > 00 CD CD CD 3E 07 06 00 D0 04 00 00 D8 17 00 00 
{400} normal block at 0x03EA0040, …
Run Code Online (Sandbox Code Playgroud)

c++ mfc memory-leaks kinect

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

Perl正则表达式不响应$

我有以下代码:

#!/usr/bin/perl
use Test::Simple tests => 2;    
$file = "lalaletc";
$file2 = "lalal";
ok($file =~ m/^lala/);
ok($file2 =~ m/^lala$/);
Run Code Online (Sandbox Code Playgroud)

输出结果如下:

1..2
ok 1
not ok 2
#   Failed test at ./test.pl line 7.
# Looks like you failed 1 test of 2.
Run Code Online (Sandbox Code Playgroud)

但$ file2没有更多的字符,所以我预计它会成功测试2.为什么不呢?

regex perl

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

为什么编译器创建一个只使用一次的变量?

考虑以下两个示例,两个示例均使用g++ (GCC) 12.1.0targeting x86_64-pc-linux-gnu:进行编译g++ -O3 -std=gnu++20 main.cpp

示例1:

#include <iostream>

class Foo {
public:
    Foo(){ std::cout << "Foo constructor" << std::endl;}
    Foo(Foo&& f) { std::cout << "Foo move constructor" << std::endl;}
    Foo(const Foo& f) {std::cout << "Foo copy constructor" << std::endl;}

    ~Foo() { std::cout << "Foo destructor" << std::endl;}
};

class Baz {
private:
    Foo foo;
public:
    Baz(Foo foo) : foo(std::move(foo)) {}
    ~Baz() { std::cout << "Baz destructor" << std::endl;}
};

Foo bar() {
    return …
Run Code Online (Sandbox Code Playgroud)

c++ language-lawyer

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

由于 malloc 的结果似乎不能保证与任何内容对齐,它是否可用?

我最近了解到,取消引用未与某个对象 ( ) 对齐的指针uint32_t* foo = (uint32_t*)7; *foo = 5;实际上是未定义的行为:

C11 第 6.2.8 节:对象对齐:

完整的对象类型具有对齐要求,这对可以分配该类型的对象的地址施加了限制。对齐是实现定义的整数值,表示可以分配给定对象的连续地址之间的字节数。对象类型对该类型的每个对象施加对齐要求:可以使用_Alignas关键字请求更严格的对齐。

好的,非常有趣。但malloc似乎根本不关心对齐:

7.22.3.4malloc函数

概要

#include <stdlib.h>
void *malloc(size_t size);

描述

malloc函数为大小由 size 指定且值不确定的对象分配空间。

退货

malloc函数返回空指针或指向已分配空间的指针。

因此:执行以下操作是否不太可能会引发未定义的行为?

uint32_t* a = malloc(10*sizeof(uint32_t));
*a = 7;
Run Code Online (Sandbox Code Playgroud)

毕竟,我们无法保证 的返回值与malloc任何内容对齐。

c malloc alignment language-lawyer

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