标签: ownership

如何防止git更改文件所有权

我注意到当我从开发服务器(Red Hat)上的github仓库中取出时,拉动完成后文件的所有权发生了变化..git文件曾经由我拥有,但后来我发现它会像我一样编写文件,我需要它以不同的用户身份编写文件.所以我改变了.git目录的所有权.

我偶然发现了git config core.filemode这是真的.我从那以后就把它弄错了.将此设置为false后,我没有看到任何区别.我该怎么做才能保证我的文件所有权不变.

这不会发生在我当地.

git file ownership

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

无法推断返回引用的闭包的适当生命周期

考虑以下代码:

fn foo<'a, T: 'a>(t: T) -> Box<Fn() -> &'a T + 'a> {
    Box::new(move || &t)
}
Run Code Online (Sandbox Code Playgroud)

我期待的是:

  • T型具有寿命'a.
  • 这个价值t只要有效T.
  • t 移动到关闭,所以关闭生活只要 t
  • 闭包返回一个引用t移动到闭包的引用.因此只要闭包存在,引用就是有效的.
  • 没有生命周期问题,代码编译.

实际发生了什么:

  • 代码无法编译:
error[E0495]: cannot infer an appropriate lifetime for borrow expression due to conflicting requirements
 --> src/lib.rs:2:22
  |
2 |     Box::new(move || &t)
  |                      ^^
  |
note: first, the lifetime cannot outlive the lifetime  as defined on the body at 2:14...
 --> src/lib.rs:2:14
  |
2 | …
Run Code Online (Sandbox Code Playgroud)

closures ownership rust borrowing

16
推荐指数
2
解决办法
967
查看次数

用于生成和管理后台线程的惯用Clojure方法

什么是惯用的Clojure方法来创建一个在后台循环的线程,对一些共享引用进行更新并管理它的生命周期?我发现自己正在使用future它,但感觉有点像黑客,因为我永远不会返回有意义的价值.例如:

(future (loop [] (do
    (Thread/sleep 100)
    (dosync (...))
    (recur))))
Run Code Online (Sandbox Code Playgroud)

此外,future-cancel当不再需要后台处理时,我需要小心这一点.关于如何在Clojure/Swing应用程序中编排它的任何提示都会很好.例如JComponent,添加到我的UI中的虚拟对象,当窗口关闭时负责杀死线程可能是一个想法.

swing multithreading dispose clojure ownership

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

来自 docker 容器的“不允许操作”以 root 身份登录

我需要你的帮助来理解我的问题。

上周我用 Catalina 更新了我的 macintosh,然后我更新了 docker for mac。

自从这些更新以来,我在共享卷上遇到了所有权问题。

我可以用一个小例子来重现。我只是创建了一个小的 docker-compose 来构建一个 nginx 容器。我有一个文件夹 src,里面有一个像“src/index.php”这样的 PHP 文件。

我构建容器并启动它。然后我去/app/www/mysrc(共享卷)并用胶带“ls -la”检查index.php是否正常,我得到:

ls: cannot open directory '.': Operation not permitted
Run Code Online (Sandbox Code Playgroud)

这是一个简单的 docker-compose 文件:docker-compose.yml:

version: "3"

services:
  test-nginx:
    restart: always
    image: 'nginx:1.17.3'
    ports:
      - "8082:80"
    volumes:
      - ./src:/app/www/mysrc
Run Code Online (Sandbox Code Playgroud)

当我构建并启动容器时,我得到:

$ docker-compose exec test-nginx sh
# cd /app/www
# ls -la
total 8
drwxr-xr-x 3 root root 4096 Oct 21 07:58 .
drwxr-xr-x 3 root root 4096 Oct 21 07:58 ..
drwxr-xr-x 3 root root …
Run Code Online (Sandbox Code Playgroud)

nginx ownership docker docker-compose macos-catalina

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

为什么在 `Cell&lt;T&gt;` 上定义的 `set` 方法显式删除旧值?(锈)

感兴趣为什么在最后一行set定义的方法显式地删除值。当函数返回时,它不应该被隐式删除(释放内存)吗?Cellold

use std::mem;
use std::cell::UnsafeCell;

pub struct Cell<T> {
    value: UnsafeCell<T>
}

impl<T> Cell<T> {
    pub fn set(&self, val: T) {
        let old = self.replace(val);
        drop(old); // Is this needed?
    } // old would drop here anyways?
    
    pub fn replace(&self, val: T) -> T {
        mem::replace(unsafe { &mut *self.value.get() }, val)
    }
}
Run Code Online (Sandbox Code Playgroud)

那么为什么不设置只这样做:

pub fn set(&self, val: T) {
    self.replace(val);
}
Run Code Online (Sandbox Code Playgroud)

或者std::ptr::read做了一些我不明白的事情。

memory cell ownership rust borrow-checker

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

单一与共享所有权的含义

刚刚看到和拥有时正在阅读维基百科的RAII.SingleShared

用Google搜索并找不到任何有用的答案!

有人可能会为一个小学生解释这个概念吗?

c++ ownership

13
推荐指数
3
解决办法
4720
查看次数

c ++ 11 - 所有权和吸气剂

我是C++的新手,我在围绕所有权问题上遇到了麻烦,特别是在吸气时.这是一些示例代码:

class GameObject {
public:
  Transform *transform();
private:
  Transform _transform;
};
Run Code Online (Sandbox Code Playgroud)

我猜一个原始指针是不安全的,因为有人可以在以后不再存在该对象时访问它?

  1. 所以我考虑使用unique_ptr作为转换成员,因为GameObject是唯一拥有转换的人.但是我不能从吸气器那里回来,是吗?但话又说回来,为什么我会首先使用unique_ptr而不是像上面那样添加它?

  2. 那么为什么不使用shared_ptr呢?这对我来说似乎不对,我不想分享所有权,GameObject是所有者,其他人可能会访问它...

  3. 那是什么?参考?我认为shared_ptr似乎是最明智的选择,因为其他人可以安全地保留对变换的引用,但是如果封闭的GameObject被破坏,那么变换是无用的呢?我可能只是想在这里以错误的方式考虑所有权,但每一种方式对我来说都是错误的.谢谢你的帮助.

c++ shared-ptr ownership unique-ptr c++11

13
推荐指数
3
解决办法
2729
查看次数

在Rust中实现类似图形的数据结构

我有一个数据结构,可以表示为链接对象链接的一些结构之间的单向图,因为链接包含元数据.

它看起来像这样:

struct StateMachine {
    resources: Vec<Resource>,
    links: Vec<Link>,
}
struct Resource {
    kind: ResourceType,
      // ...
}

enum LinkTarget {
    ResourceList(Vec<&Resource>),
    LabelSelector(HashMap<String, String>),
}

struct Link {
    from: LinkTarget,
    to: LinkTarget,
    metadata: SomeMetadataStruct,
}
Run Code Online (Sandbox Code Playgroud)

整个结构需要是可变的,因为我需要能够在运行时添加和删除链接和资源.因此,我不能使用正常的生命周期模型并将资源绑定到父结构的生命周期.

我知道我需要通过选择合适的类型来"选择我自己的保证",但我不确定解决这个问题的最佳方法是什么.

ownership rust data-structures

13
推荐指数
3
解决办法
5236
查看次数

使用构建器模式时,我应该按值还是可变引用获取“self”?

到目前为止,我在官方 Rust 代码和其他包中看到了两种构建器模式:

impl DataBuilder {
    pub fn new() -> DataBuilder { ... }
    pub fn arg1(&mut self, arg1: Arg1Type) -> &mut Builder { ... }
    pub fn arg2(&mut self, arg2: Arg2Type) -> &mut Builder { ... }
    ...
    pub fn build(&self) -> Data { ... }
}
Run Code Online (Sandbox Code Playgroud)
impl DataBuilder {
    pub fn new() -> DataBuilder { ... }
    pub fn arg1(self, arg1: Arg1Type) -> Builder { ... }
    pub fn arg2(self, arg2: Arg2Type) -> Builder { ... }
    ... …
Run Code Online (Sandbox Code Playgroud)

design-patterns ownership rust

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

利用`std :: weak_ptr`的自杀对象实现

我正在考虑使用"自杀对象"来模拟游戏中的实体,即能够自行删除的对象.现在,一般的C++ 03的实现(普通旧delete this)不执行任何潜在指的自杀的对象,这就是为什么我使用的其他对象std::shared_ptrstd::weak_ptr.

现在进行代码转储:

#include <memory>
#include <iostream>
#include <cassert>

struct SuObj {
    SuObj() { std::cout << __func__ << '\n'; }
    ~SuObj() { std::cout << __func__ << '\n'; }

    void die() {
        ptr.reset();
    }

    static std::weak_ptr<SuObj> create() {
        std::shared_ptr<SuObj> obj = std::make_shared<SuObj>();
        return (obj->ptr = std::move(obj));
    }

private:

    std::shared_ptr<SuObj> ptr;
};

int main() {
    std::weak_ptr<SuObj> obj = SuObj::create();

    assert(!obj.expired());
    std::cout << "Still alive\n";

    obj.lock()->die();

    assert(obj.expired());
    std::cout << "Deleted\n";

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

此代码似乎工作正常.但是,我想让别人去关注它.这段代码有意义吗?我是否盲目地驶入未定义的土地?我应该放弃键盘并立即开始艺术研究吗?

我希望这个问题能够充分缩小.看起来有点微小而且低级别的CR. …

c++ shared-ptr ownership language-lawyer

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