问题标签 [ownership]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
1793 浏览

c++ - 所有权以及如何避免 shared_ptr

我正在尝试为游戏引擎编写一个简单的事件管理器类和侦听器。在通常的实现(即McShaffry)中,事件管理器注册侦听器,原则上将 shared_ptr 作为私有成员保存到侦听器。

我在很多情况下看到人们说应该避免 shared_ptr 之类的东西(例如这里)。因此,我试图找到在不共享侦听器所有权的情况下实现事件管理器的方法。

我想到的一种方法是为侦听器分配唯一的 ID,并将其 ID 注册到事件管理器。然后侦听器负责在事件管理器更新后“询问”事件管理器是否在其 ID 下可用。

我想问一下在这种情况下是否有更清洁和/或标准的方法来避免共享所有权,但通常也是如此。例如,我对听众有同样的问题。侦听器需要存储指向其父对象(或它们正在侦听的对象)的指针,以便在处理事件时可以调用其方法。

0 投票
7 回答
215 浏览

c - 我是否将数组所有权从我的库函数传回给调用者?

我是从 Python 来到 C 的。Python 有一种非常简单的白手套操作字符串的方法。我在 C 中使用数组的次数越多,我就越觉得拥有某些特性会多么方便。我决定创建一个库来执行此操作,而不是每次我需要执行特定操作时都编写循环来执行此操作。

所以,假设我有一个库,调用看起来像这样:

char* new_array = meatSlicer(old_array, element_start);

我将指针传递给我想要更改的数组,期望指针返回,并指示要切片的元素。

如果meatSlicer(是的,我是一个错误命名的傻瓜)返回一个指向在切片器中本地创建的数组的指针,则该指针将是一个错误指针。所以,在meatSlicer()我有这个:

我的问题是,我是否正确地将所有权归还给调用者函数,以便它可以free()新数组?传递一个指向堆上数组的指针是否足够?

0 投票
2 回答
111 浏览

c - C 中的所有权约定

假设我想使用一个包含这 2 个标头的库:

我假设注释意味着char*skey和s 的内容value将被add函数复制,并且在它返回后它不会存储指针以供使用。这意味着调用函数可以在调用之后立即对这些指针执行任何操作,例如freeingkey和。valueadd

调用函数也可以期望add不会修改keyor value

现在,如果没有该注释并且既没有实现的源代码也没有使用示例,那么有经验的 C 程序员会如何假设这些所有权问题?

0 投票
1 回答
2749 浏览

sql - Service Broker 和数据库所有权不匹配

我有一个 SQL Server 2008 R2 实现,为在同一个盒子上运行的 .Net/IIS 网站打开了 Service Broker。

当 global.asax application_startup 事件触发时它不会抛出错误,但是事件日志每秒都会被垃圾邮件发送:

[dbo].[SqlQueryNotificationStoredProcedure-e6946263-93b8-445e-9d92-6fbd49a4b089]'在队列'XXXXXX.dbo.SqlQueryNotificationService-e6946263-93b8-445e-9d92-6fbd49a4b089'上运行输出以下内容:'数据库所有者SID记录在master 数据库与数据库“XXXXXXX”中记录的数据库所有者 SID 不同。您应该通过使用 ALTER AUTHORIZATION 语句重置数据库“XXXXXXX”的所有者来纠正这种情况。

此外,Service Broker 没有正确发送消息(对于 SqlCacheDependency)——它基本上不起作用。

我运行了以下查询并确定存在所有权不匹配:

所有者名称:usrAAAAA

OwnerSID: 0xAAAAA

DboUserMapping: 萨

DboUserSID: 0x01

我见过的大多数地方都建议我应该使用 ALTER AUTHORIZATION 将“sa”显式设置为数据库所有者。但是,我不确定它是否应该设置为saor usrAAAAA,并且我不确定是否有任何可能的影响(我还能破坏什么其他东西?如果有的话)。

对此的任何帮助将不胜感激。

0 投票
1 回答
1460 浏览

windows - 分配用户权限时出现 Cacls 错误

谁能告诉我为什么这个命令会失败:“文件名、目录名或卷标语法不正确。”

cacls c:\TestHome\brytest\JBryan42 /t /c /g JBryan42:F

虽然此命令成功:

cacls c:\TestHome\brytest\JBryan42 /t /c /g 管理员:F

它们都显示“已处理的目录:c:\TestHome\brytest\JBryan42”,但对于 JBryan42,之后会出现错误。

这是在 Windows 7 上,以管理员身份登录。

我的目标是为 JBryan42 授予全部权利和所有权(用户存在且非管理员)。

任何人都可以在这里给我一个线索吗?我错过了什么?为什么 Windows 不能有“chown”?

0 投票
2 回答
22093 浏览

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

我一直注意到,当我从开发服务器(Red Hat)上的 github 存储库中拉取文件时,拉取完成后文件的所有权会发生变化。.git 文件曾经归我所有,但后来我注意到它会以我的身份写入文件,我需要它以不同的用户身份写入文件。所以我改变了 .git 目录的所有权。

我偶然发现了 git configcore.filemode这是真的。从那以后,我将其设置为假。将其设置为 false 后,我没有看到任何差异。我应该怎么做才能防止我的文件所有权发生变化。

这不会发生在我本地。

0 投票
1 回答
238 浏览

c++ - C++ - 通过指针表示所有权

在我的游戏引擎中,共有三个类:EntityCharacterEntityVehicleEntityVehicleSeat

在此处输入图像描述

EntityVehicle包含带有指向EntityCharacter实例的指针的座位对象。如果座位对象的目标字符实体指针是空指针,则没有字符坐在该特定座位对象上。EntityCharacter 类实例还具有指向座位对象的指针,指示这些角色实体是否坐在某些车辆中。

换句话说,EntityCharacter 类实例有一个指向 EntityVehicleSeat 的指针,反之亦然:

这样我们就可以通过角色和车辆实体检查这个所有权。

将指针设置为相互指向很简单,但是有一个问题 - 如果另一个对象超出范围,我们最终会在剩余对象中拥有一个无效的指针。

在此处输入图像描述

怎样才能巧妙地表达这种所有权?如何通知另一个对象另一个对象不再存在的事实?

0 投票
0 回答
81 浏览

sql - 无法在现场 LAMP Codeigniter 上使用模型

我有一个网站,我最近搬到了 Linux VM 上的实时 LAMP 版本。使用 codeigniter,我让模型尝试对 SQL 数据库进行简单的注册。除了我告诉我的代码给出的错误之外,我在错误日志中没有收到错误。但我确实在浏览器的控制台中收到 500 Internal Server 错误。模型中的代码是:

公共函数寄存器($email,$password,$first_name,$last_name,$gender,$birthday){

}

它没有到达错误日志中的加载后行,但确实到达了加载前。

我认为这可能是 database.config 的问题,所以以防万一这里没有用户名或密码(我已经检查了 1000 次):

现在,我认为这是我的配置文件或某些所有者的问题。我以前从未发布过实时网站,所以我不知道要寻找什么。对此的任何建议将不胜感激!

0 投票
1 回答
511 浏览

forms - 使用 WinApi Window 使 VCL 窗体和对话框很好地发挥作用

短版——

我有一个使用 WinApi 调用创建的 OpenGL 窗口。我宁愿保持这种方式,而不是将 OpenGL 包装到 VCL 表单中。

为了提供一些首选项菜单和文件对话框,我使用了 VCL 表单和典型的对话框(TOpenDialog、TSaveDialog)。

我想知道的是 - 我如何让这些表单和对话框将我的 OpenGL 窗口视为它们的所有者?

我试图将我的窗口句柄传递给表单,但我确信我这样做不正确,因为它没有任何效果。

VCL 表单需要什么才能将本机窗口视为它的所有者?

长版 -

我的应用程序有两种模式。独立模式,它自己运行。其次,有一个插件模式在宿主应用程序的进程空间中运行

在独立模式下,我对 VCL 表单和对话框没有任何问题。即使它们的所有权是不确定的,它也不会以任何方式影响可用性。

在插件模式下,我发现主机应用程序将控制我的 VCL 表单和打开和保存对话框。

因此,当在主机的进程空间中运行时,我的 VCL 表单呈现非常奇怪。我尝试手动修复它们,但它们不会响应样式更改。

编辑 - 对话框的详细信息

我主要关心的是 VCL 表单的呈现,但这里有一些关于对话框的更多细节,如果它有任何用处的话。

我正在执行这样的对话框:

它没有任何效果。该对话框的行为与我没有将句柄传递给它一样。请记住,我使用的是 Delphi 2006,而这个版本的 Delphi 仍在使用旧的文件对话框,它们是在 Windows XP 中引入的。

最后 - 当作为插件运行时,我的打开/保存对话框将出现,就好像它们属于任务栏上的主机应用程序一样。因此,主机有一个任务栏选项卡。我的应用程序也有它自己的选项卡。当我执行它时,我的打开对话框会附加到主机的选项卡上。

图片

独立模式下的首选项菜单:

独立模式下的首选项菜单

首选项菜单作为主机中的插件:

主机中的首选项菜单

如果我可以简单地更改黑色文本的颜色,那就足够了,但我似乎做不到。

0 投票
1 回答
11549 浏览

c# - 无需在 CRM 2011 中调用 AssignRequest 即可创建具有特定所有者的新记录

在我们的应用程序中,我们创建了几千条电话记录。每个电话都应该有一个不同的所有者,由名为 GetAnyAppropriateSystemUser() 的方法确定,该方法根据某些标准找到一些随机 SystemUser。

在下面的代码示例中,我们创建了一个电话呼叫,然后在其上使用 AssignRequest 来指定其所有者。

这可以正常工作,但是有两个调用,一个要创建,一个要分配。是否可以在调用 Create() 方法之前设置 PhoneCall 记录的“ownerid”,从而消除以后调用 AssignRequest 的需要?它似乎工作,我什至在SDK中找到了一个类似的例子,如下所示。

SDK 示例:针对目标收入汇总自定义期间的目标数据

虽然它似乎有效,但如果我们在创建新记录之前设置 ownerid,有什么我们必须注意的吗?有什么不同吗?

非常感谢您提前。