我应该在C+;中使用内存地址作为应用程序级标识符吗+;? 我正在学习C++,我想知道使用对象分配的内存地址作为临时应用程序级别标识符是否是个好主意。 < P>这可能不是最好的主意。如果没有其他问题,它将严重限制您将来移动/克隆对象的能力。如果您依靠它从ID中查找对象,它也会增加风险——过时的引用可能会导致崩溃。

我应该在C+;中使用内存地址作为应用程序级标识符吗+;? 我正在学习C++,我想知道使用对象分配的内存地址作为临时应用程序级别标识符是否是个好主意。 < P>这可能不是最好的主意。如果没有其他问题,它将严重限制您将来移动/克隆对象的能力。如果您依靠它从ID中查找对象,它也会增加风险——过时的引用可能会导致崩溃。,c++,C++,这可能不是最好的方法。如果没有其他问题,它将严重限制您将来移动/克隆对象的能力。如果您依赖它从ID中查找对象,这也会增加风险——过时的引用可能会导致崩溃。如果您使用new()创建对象,则返回的对象实例指针实际上就是对象。在显式dispose()d之前,它将成为应用程序标识符。我尽量不在堆栈上构建对象——我写了太多多多多线程代码,所以这太危险了 显然,有许多事情是不能用地址作为ID的——例如,不能通过递减/递增一来指向前面/后面ID为的对象。如果使用new()创建对象,则返回的对象实例指针实际上就

这可能不是最好的方法。如果没有其他问题,它将严重限制您将来移动/克隆对象的能力。如果您依赖它从ID中查找对象,这也会增加风险——过时的引用可能会导致崩溃。

如果您使用new()创建对象,则返回的对象实例指针实际上就是对象。在显式dispose()d之前,它将成为应用程序标识符。我尽量不在堆栈上构建对象——我写了太多多多多线程代码,所以这太危险了


显然,有许多事情是不能用地址作为ID的——例如,不能通过递减/递增一来指向前面/后面ID为的对象。

如果使用new()创建对象,则返回的对象实例指针实际上就是对象。在显式dispose()d之前,它将成为应用程序标识符。我尽量不在堆栈上构建对象——我写了太多多多多线程代码,所以这太危险了



显然,有许多事情是不能用地址作为ID的——例如,不能通过递减/递增一个来指向前面/后面ID的对象。

不应该这样做。因为除了这里已经提到的,地址被重用,并且一旦旧对象被释放,您的id(本质上是一个指针)可以被其他对象重用。例如,如果该id将用于访问某些会话信息,那么您很可能正在访问/修改其他用户的会话-这不是一件好事。但是,您可以将地址与一些其他信息结合使用,例如线程id、当前系统时间等。

您不应该这样做。因为除了这里已经提到的,地址被重用,并且一旦旧对象被释放,您的id(本质上是一个指针)可以被其他对象重用。例如,如果该id将用于访问某些会话信息,那么您很可能正在访问/修改其他用户的会话-这不是一件好事。但是,您可以将地址与一些其他信息结合使用,如线程id、当前系统时间等。

什么的标识符?@JamesMcNellis用于区分类似对象实例与单个类。例如,正如我在下面发布的内容中所述,如果您轻松松地这样做,您将自食其果,最好不要这样做。记住,一个地址可以被另一个对象重用一旦你的对象被释放,你必须非常小心地知道一个ID何时停止引用你认为它标识的对象。好吧,但问题是不使用地址作为ID是因为它使应用程序不断地在大型复杂对象的周围移动,“非常非常困难”。以任何其他方式传递/发送包含10MB缓冲网络数据的对象是不现实的。避免使用已释放对象的一个技巧是永远不要释放它们-在队列和池中循环它们…是的,在你说之前-这有它自己的问题集,例如,将对象双重发布回池。我非常清楚这一点:(什么的标识符?@JamesMcNellis用于区分类似对象实例与单个类。例如,正如我在下文中所发布的那样,如果你轻率地这样做,你会自食其果,最好不要这样做。记住,一旦你的对象被释放,地址可以被另一个对象重用,你必须非常小心地知道什么时候ID不再引用您认为它标识的对象。好吧,但问题是,不使用地址作为ID是因为它使应用程序在大型复杂对象周围不断移动“非常非常非常困难”。以任何其他方式传递/发送(比如)包含10MB缓冲网络数据的对象是不实际的。避免使用已释放对象的一个技巧是永远不要释放它们-在队列和池中循环它们…是的,在你说之前-这有它自己的问题集,例如,将对象双重发布回池。我非常清楚这一点:(如果在安全上下文中使用这些ID,并且攻击者可以预测,这也可能是一个问题。@Alexey:对于攻击者来说,提供一个落入不可访问内存中的标识符可能更容易,而且几乎同样糟糕(DoS而不是权限提升).?它使移动对象变得更容易!您只需移动地址,然后将用于包含它的变量置零,或者通过创建/解除冷却另一个*对象来重置该变量。克隆对象-从来没有做过最好的事情,尤其是在多线程应用程序中。但是,我同意,为了安全起见-实际上毫无用处。Secur城市化是一个巨大的问题,超出了OP问题的范围,(我认为:)。OP只对一个应用程序中的一个ID感兴趣,而不是作为某个分布式ID。@MartinJames Umm…如果有人对对象的“ID”有一个挥之不去的引用,而你将该对象移动到内存下面,该引用将悬空,如果取消引用,可能会导致问题,特别是如果你假设该ID是ob的地址ject。(当然,除非你引用计数。)不要移动对象!我为什么要移动对象?新操作符已分配了一些空间并构建了对象。在某个地方。我为什么要移动它?我不能说我一生中是否移动过对象-我当然记不起曾经这样做过。如果