问题列表 - 第21459页

为什么delete运算符必须是静态的?

我发现这个问题同样问题,但是只有"新"部分得到了回答,所以这里再说一次.

为什么delete运算符必须是静态的?不知何故,它没有意义.新运算符非常有意义,就像构造函数不能虚拟一样,新运算符也不行.但是,析构函数可以(并且应该)在使用继承时是虚拟的,以便允许销毁正在使用的对象(通过多态)作为基类.

据我所知,当调用delete运算符时,该对象已被销毁,因此不存在"this".然而,使用与虚拟析构函数相同的推理仍然有意义的是让delete运算符与创建对象的new运算符匹配.

这就是我的意思

class A
{
  public:
    virtual ~A() {}
};

class B : public A
{
  public:
    void* operator new (size_t sz);
    void  operator delete (void* ptr, size_t sz);
};
Run Code Online (Sandbox Code Playgroud)

现在如果我们这样做

A *ptr = new B();
delete ptr; // <-- fail
Run Code Online (Sandbox Code Playgroud)

应该调用一个删除操作符(默认值),因为它是静态的,并且在编译时不知道(除了这里的小事),delete-operator是正确的.

但是,我用上面的代码做了一个小的测试程序(在new/delete操作符中只有malloc/free,在delete中只有print语句),并使用g ++编译它.非常意外地运行它会在B的删除操作符中产生输出.

我的(真正的)问题是:删除操作符是否有一些隐含的"虚拟"?在没有这个指针的意义上它只是静态的吗?或者这只是一个g ++功能?

我开始查看C++规范,但我必须承认,我有点不知所措,所以任何帮助都会受到赞赏.

c++ operator-overloading

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

接口,匿名方法和内存泄漏

这是一个构造的例子.我不想在这里发布原始代码.我尝试提取相关部分.

我有一个管理监听器列表的界面.

TListenerProc = reference to procedure (SomeInt : ISomeInterface);

ISomeInterface = interface
   procedure AddListener (Proc : TListenerProc);   
end;
Run Code Online (Sandbox Code Playgroud)

现在我注册一个监听器:

SomeObj.AddListener (MyListener);

procedure MyListener (SomeInt : ISomeInterface);
begin
  ExecuteSynchronized (procedure
                       begin
                       DoSomething (SomeInt);
                       end);
end;
Run Code Online (Sandbox Code Playgroud)

我确实得到了内存泄漏.永远不会释放匿名方法和接口.我怀疑这是由于某种循环引用.匿名方法保持界面生效,界面保持匿名方法生效.

两个问题:

  1. 你支持这个解释吗?或者我在这里错过了其他什么?
  2. 我能做些什么吗?

提前致谢!


编辑:在一个小到足以在此发布的应用程序中重现这一点并不容易.我现在能做的最好的事情如下.匿名方法不会在这里发布:

program TestMemLeak;

{$APPTYPE CONSOLE}

uses
  Generics.Collections, SysUtils;

type
  ISomeInterface = interface;
  TListenerProc  = reference to procedure (SomeInt : ISomeInterface);

  ISomeInterface = interface
  ['{DB5A336B-3F79-4059-8933-27699203D1B6}']
    procedure AddListener (Proc : TListenerProc);
    procedure NotifyListeners;
    procedure Test;
  end;

  TSomeInterface = class (TInterfacedObject, ISomeInterface) …
Run Code Online (Sandbox Code Playgroud)

delphi memory-management interface anonymous-methods delphi-2010

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

我如何与Perl的ClearCase交互?

我的项目需要使用excel表中的Perl脚本从ClearCase数据中提取一些东西,这些是 -
通过给出两个特定的时间线或两个基线.

  1. 该基线内相关的所有活动(列标题"活动")
  2. 所有者的ID(列标题 - 所有者)
  3. 特定活动中关联的所有元素.(列标题 - "元素详细信息")
  4. 对于每个元素,关联的版本(列标题 - "版本")
  5. 对于每个元素,代码行总数,添加的代码行总数,删除的代码行总数,代码行总数发生变化..(列标题"代码行数","行代码添加","代码行删除"&"代码行改变了")

请帮助我...

perl clearcase

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

使用Google Maps API获取商家地址

我有一个要求,我希望谷歌地图API将有一个解决方案.我从未使用过谷歌地图API - 所以我对此非常陌生.

在网站主页上有一个表单,当用户来时,我希望发生以下事情:

1)城市字段应填充基于IP的用户城市

2)有一个名为商店名称的第二个字段 - 当用户开始键入商店名称时 - 我想在该城市中获取具有该名称的所有商家信息,并将其显示为用户可以选择相应分支的下拉列表.地图上无需显示任何内容.Egs - 如果休斯顿的用户开始输入麦当劳,则应开始显示以下商家信息

  • McDonalds,12 Pearland Ave,Houston TX
  • McDonalds,2600 Bary Area Blvd,Houston TX
  • McDonalds,262 Clearlake Blvd,Houston TX

此外,当我们从Google API获取商家信息的地址时 - 我们是否将其作为一个字符串获取,我们需要解析它,或者我们是否获得不同的字段街道名称,城市,州,邮政编码等

任何信息或示例将非常感谢谢谢

google-maps google-maps-api-3

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

如何为Mac OSX编写虚拟打印机驱动程序

我需要为OSX编写一个"虚拟打印机驱动程序",这样当用户按下Command + P打开"打印"对话框时,他会看到我的虚拟打印机......它将用于生成各种类型的文件,而不是物理打印到纸张.

我是这个主题的新手,我环顾四周但却一无所获.您是否有任何关于此主题的文档的链接或参考?

printing macos virtual

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

有没有办法在子类中隐藏部分方法?

这个问题看起来很奇怪,但我最近在一次采访中遇到了这个问题.

有人问过,c#中是否有一种方法可以将方法部分隐藏在继承的子类中?假设基类A,暴露4种方法.B类实现A,它只能访问前2个方法,而C类实现A只能访问最后2个方法.

我知道我们可以这样做

public interface IFirstOne
{
    void method1();        
    void method2();
}

public interface ISecondOne
{
    void method3();
    void method4();
}

class baseClass : IFirstOne, ISecondOne
{
    #region IFirstOne Members

    public void method1()
    {
        throw new NotImplementedException();
    }

    public void method2()
    {
        throw new NotImplementedException();
    }

    #endregion

    #region ISecondOne Members

    public void method3()
    {
        throw new NotImplementedException();
    }

    public void method4()
    {
        throw new NotImplementedException();
    }

    #endregion
}

class firstChild<T> where T : IFirstOne, new()
{
    public void DoTest() 
    { …
Run Code Online (Sandbox Code Playgroud)

c# inheritance interface

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

如何构建一个非常低分辨率的计时器?

我需要实现一个执行数据库导入的Windows服务,每月一次.该程序通过电子邮件接收数据,并将在每个月末导入它们.

有没有比设置程序重复睡眠max_integer秒/毫秒更好的方法?

.net c# vb.net timer scheduled-tasks

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

如何在Django中使用SingletonModel?

我在Django做了一个非常简单的网站.在其中一个页面上有一个垂直的自动收报箱.我需要给客户端一种方法来编辑自动收报机的内容HTMLField.

想到的第一种方法是制作一个Ticker只有一个实例的模型.然后我想,而不是手动确定只存在一个实例,也许有(或应该有)像SingletonModelDjango中的类,它就像一个普通的模型,除了它确保只创建一个实例?

或许我应该以不同的方式解决我的问题?

python django orm singleton

18
推荐指数
2
解决办法
8772
查看次数

提取十六进制数的"部分"

我想写一个函数getColor(),它允许我提取输入为long的十六进制数字的部分

详情如下所示:

//prototype and declarations
enum Color { Red, Blue, Green };

int getColor(const long hexvalue, enum Color);

//definition (pseudocode)
int getColor(const long hexvalue, enum Color)
{
   switch (Color)
   {
      case Red:
         ; //return the LEFTmost value (i.e. return int value of xAB if input was 'xABCDEF')
       break;

      case Green:
         ; //return the 'middle' value (i.e. return int value of xCD if input was 'xABCDEF')
       break;

      default: //assume Blue
         ; //return the RIGHTmost value (i.e. return int value of xEF …
Run Code Online (Sandbox Code Playgroud)

c c++ bit-manipulation

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

WPF图表:如何折叠lineseries中的数据点

我在图表中有多个系列.首先绘制图表线,然后点线.这很烦人,大点的大小使大型数据集变得毫无用处.目前我正在为每个lineseries做这个...

    <chartingToolkit:LineSeries
          Title="Socket 2"
          Name="LineSocket2"
          LegendItemStyle ="{StaticResource LegendItemStyle}"
          IndependentValueBinding="{Binding timestamp}"
          DependentValueBinding="{Binding wattage}"
          ToolTip="Socket 2">

        <chartingToolkit:LineSeries.DataPointStyle>
            <Style TargetType="{x:Type chartingToolkit:LineDataPoint}">
                <Setter Property="Visibility" Value="Collapsed"/>
            </Style>
        </chartingToolkit:LineSeries.DataPointStyle>

    </chartingToolkit:LineSeries>
Run Code Online (Sandbox Code Playgroud)

但它没有做我想要的.

怎么做到呢?

wpf charts

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