小编Vin*_*Pii的帖子

如何通过引用或值返回智能指针(shared_ptr)?

假设我有一个带有返回a的方法的类shared_ptr.

通过引用或值返回它可能带来的好处和缺点是什么?

两个可能的线索:

  • 早期的物体破坏.如果我返回shared_ptrby(const)引用,则引用计数器不会递增,因此当它在另一个上下文(例如另一个线程)中超出范围时,我会冒被删除的风险.它是否正确?如果环境是单线程的,那么这种情况也会发生吗?
  • 成本.传递价值肯定不是免费的.是否值得尽可能避免它?

谢谢大家.

c++ return smart-pointers

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

为什么隐式复制构造函数调用基类复制构造函数而定义的复制构造函数不?

考虑一个类层次结构,其中A是基类并B派生自A.

如果未定义复制构造函数B,编译器将合成一个.调用时,此复制构造函数将调用基类复制构造函数(即使是合成的构造函数,如果用户没有提供).

#include <iostream>

class A {
    int a;
public:
    A() {
        std::cout << "A::Default constructor" << std::endl;
    }

    A(const A& rhs) {
        std::cout << "A::Copy constructor" << std::endl;
    }
};

class B : public A {
    int b;
public:
    B() {
        std::cout << "B::Default constructor" << std::endl;
    }
};

int main(int argc, const char *argv[])
{
    std::cout << "Creating B" << std::endl;
    B b1;
    std::cout << "Creating …
Run Code Online (Sandbox Code Playgroud)

c++ language-design copy-constructor

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

为什么这个C++静态单例永远不会停止?

我在C++中实现了单例(静态版本).我知道关于这种模式和潜在的线程安全问题的所有争议,但我很好奇为什么这个确切的实现不会停止.该程序永不退出,最终仍处于死锁状态.

singleton.h:

#pragma once
#include <thread>
#include <atomic>

class Singleton
{
public:
    static Singleton& getInstance();

private:
    std::thread mThread;
    std::atomic_bool mRun;

    Singleton();
    ~Singleton();
    void threadFoo();
};
Run Code Online (Sandbox Code Playgroud)

singleton.cpp

#include "singleton.h"

Singleton& Singleton::getInstance()
{
    static Singleton instance;
    return instance;
} 

Singleton::Singleton()
{
    mRun.store(true);
    mThread = std::thread(&Singleton::threadFoo, this);
}

Singleton::~Singleton()
{
    mRun.store(false);

    if(mThread.joinable())
        mThread.join();
}

void Singleton::threadFoo()
{
    while(mRun)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

main.cpp中

#include "singleton.h"

int main()
{
    Singleton::getInstance();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我所知道的:

  • 线程终止
  • 主线程卡在连接中
  • 它与静态有关,如果我使构造函数公开并在main()中创建一个Singleton实例,它将正确终止.

使用Visual Studio 2012.感谢您的建议.

c++ singleton static multithreading c++11

17
推荐指数
3
解决办法
2663
查看次数

反向智能搜索(reverse-i-search),如何获得以前的结果?

在终端(Ctrl+ R)上进行反向智能搜索时,我可以继续按Ctrl+ R返回"历史记录"并获取包含我的搜索字符串的旧命令.

如何返回到我已经显示的结果(以前的搜索结果)?

bash terminal command-line

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

PTHREAD_RECURSIVE_MUTEX_INITIALIZER和PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP有什么区别?

静态初始化递归互斥锁时,有什么区别

static pthread_mutex_t foo_mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER;
Run Code Online (Sandbox Code Playgroud)

static pthread_mutex_t foo_mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
Run Code Online (Sandbox Code Playgroud)

为什么我要一个而不是另一个呢?

c pthreads

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

Java是否保证对外部类的引用的持久性?如何进行以下跟踪?

当实例化一个内部类(NB:非静态)时,它将获得对外部类的引用(基于其构造)。在这种情况下(如果有的话),该参考的持久性有哪些保证?

详细的解释(试图使问题更有意义)

考虑以下简单代码:

public class OuterInnerExample {

    private int mInt;

    public void startJob() {
        InnerRunnable r = new InnerRunnable();
        Thread t = new Thread(r);
        t.start();
    }

    private class InnerRunnable implements Runnable {
        public void run() {
            int localInt = mInt;
            System.out.println(localInt);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编译后,如果我们反编译类文件(我曾使用过jad),则可以观察到它InnerRunnable具有一个this$0成员,该成员是对OuterInnerExample对象的引用。

InnerRunnable在调用之前,在的编译器综合构造函数中设置此引用super()(因此避免了this$0可能null在对象构造完成之前使用对象(即通过基类)的情况)。

InnerRunnable要访问时mInt,它将使用由编译器合成的静态getter,该静态getter将对的引用OuterInnerExample作为参数(这将是this$0)。这个吸气剂就是access$100方法。

作为参考,可以在以下位置找到反编译的Java:http : //pastebin.com/gr8GB03t

现在,整个问题是我观察到了(无法解释),类似于以下内容的堆栈跟踪:

FATAL …
Run Code Online (Sandbox Code Playgroud)

java reference inner-classes

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

如何使用argparse处理CLI子命令

我需要实现一个命令行界面,程序接受子命令.

例如,如果程序名为"foo",则CLI看起来像

foo cmd1 <cmd1-options>
foo cmd2
foo cmd3 <cmd3-options>
Run Code Online (Sandbox Code Playgroud)

cmd1并且cmd3必须与其中至少一个选项一起使用,并且这三个cmd*参数始终是独占的.

我试图在argparse中使用subparser,但暂时没有成功.问题是cmd2,没有参数:

如果我尝试添加不带参数的subparser条目,则返回的命名空间parse_args将不包含任何告知我已选择此选项的信息(请参阅下面的示例).如果我尝试cmd2作为参数添加parser(而不是subparser),那么argparse会期望cmd2参数将跟随任何subparsers参数.

有没有一种简单的方法来实现这一目标argparse?用例应该很常见......

以下是我到目前为止所尝试的更接近我需要的内容:

parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(help='Functions')
parser_1 = subparsers.add_parser('cmd1', help='...')
parser_1.add_argument('cmd1_option1', type=str, help='...')

parser_2 = subparsers.add_parser(cmd2, help='...')

parser_3 = subparsers.add_parser('cmd3', help='...')
parser_3.add_argument('cmd3_options', type=int, help='...')

args = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)

python argparse subcommand subparsers

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

如何编写编译器后端以从C代码生成用户定义的hw体系结构的程序集

我正在开发一个项目,我必须定义一个新的处理器硬件架构.我需要一个编译器来为这个目标生成汇编代码(它有自己的指令集).

该处理器的程序将用C语言编写.

我这样做的想法是解析C代码并生成一个抽象语法树(AST),然后从AST生成程序集.

当然我想重用现有的组件(我不希望重写一个C语言分析器),但是我可以用什么工具或框架来完成这个任务呢?

谢谢.

c c++ compiler-construction assembly instruction-set

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

在 ansible playbook 中创建来自主机组的字典列表

我想动态创建一个字典列表,如下所示:

[ {'host': 'hostname1', 'id': 1}, {'host': 'hostname2', 'id': 2}, ]
Run Code Online (Sandbox Code Playgroud)

并将其分配给我的剧本中的一个变量。

我正在使用的角色需要此变量。

我的尝试如下:

- hosts:
   - some-hosts
  vars:
    zk_hosts: []
  tasks:
    - name: create my var
      set_fact:
        zk_hosts: "{{ zk_hosts + [ {'host': item.1, 'id': item.0} ] }}"
      with_indexed_items: "{{ groups.some-hosts }}"
Run Code Online (Sandbox Code Playgroud)

但是,当我运行剧本时,我收到了这个警告:

 [WARNING]: While constructing a mapping from stack.yml, line 16, column 3, found a duplicate dict key (vars).  Using last defined value only.
Run Code Online (Sandbox Code Playgroud)

并且在这场比赛中出现错误:

fatal: [192.168.0.21]: FAILED! => {"failed": true, "msg": "ERROR! 'zk_hosts' is undefined"}
Run Code Online (Sandbox Code Playgroud)

如果我zk_hosts …

dictionary ansible

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

如何分发ansible模块?

如果有人开发了 ansible 角色,可以通过在 github 上创建一个 repo 来轻松分发它,该 repo 可通过 ansible-galaxy 安装(非常明确的说明)。

模块呢?

是否有类似的“支持框架”来发布开源 ansible 模块(例如,一堆 python 文件),以便用户可以轻松安装它?

python module release ansible ansible-galaxy

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