标签: reference-counting

如何在Delphi中实现引用计数对象

我有一个像结构的图形.我不确切知道何时以传统的Delphi方式销毁对象,而是想实现类似引用计数对象的东西.我知道我可以使用像object.GetReference和object.lease而不是Free,并使用私有变量进行引用计数,但有没有更好的方法?

谢谢

delphi reference-counting object

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

ABContact的替代地址簿API帮助程序

我有一个Iphone应用程序,它使用了由Erica Sedun编写的优秀ABContactHelper库并在github上发布

现在随着XCode4和引用计数支持的发布,它会导致很多错误.我已经查看了github上的forks,但似乎没有更新到使用引用计数的XCode 4.我试图自己更新它,但它缓慢且容易出错.我尝试过自动重构支持,但无济于事.

有没有人知道另一个AddressBook包装器,它提供了一个简单的界面来与IPhone AddressBook进行交互?

iphone reference-counting objective-c abaddressbook xcode4.2

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

C++ - 智能指针和自定义内存分配困境

关于智能指针和内存分配我处于两难境地.

在我的智能指针类中,我通过引擎中的内存模块拥有自己的分配内存方式.

template <class T>
    class Object
    {
    public:
        inline Object()
        {
            Init();

            if (mEngine)
            {
                mObj = (T*) mEngine->GetMemoryManager()->Allocate(sizeof(T));
                mRefCount = 1;
            }
        }
Run Code Online (Sandbox Code Playgroud)

现在,当我想要Destroy()我的引擎时,我想要释放所有内存.这首先是因为我想清理与我的引擎相关的所有内存,还因为清理mObj依赖于我的内存管理器,因为它可能使用例如内存池来分配/释放内存,并且删除该内存管理器将导致不可分配的记忆.

那么我是否用聪明的指针射击自己?有没有一种聪明的方法来解决这个问题?

c++ memory-leaks memory-management smart-pointers reference-counting

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

引用计数等于0的对象仍然是持久的

我正在尝试增强非ARC应用程序中的内存分配.有些对象即使引用计数为0,也会在两个快照之间列为持久对象.

这是我的快照视图: 在此输入图像描述

让我们在第一个快照(0x6deb180)中选择所选的LSBookChapter.这是该对象的历史:

在此输入图像描述

为什么该对象没有被释放?如果引用计数为0,我无法弄清楚当我保留该对象时..

memory-leaks reference-counting objective-c instruments ios

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

retainCount总是-1?

任何人都可以帮助,我有一些代码,我正在检查retainCount但它总是-1,至少应该是1?

这是我的代码,我做错了什么?

    NSNumber* n = [[NSNumber alloc] initWithInt:100];

    NSLog(@"Count of   n : %i",[n retainCount]);

    NSNumber* n1 = n;

    NSLog(@"Count of   n : %i",[n retainCount]);
    NSLog(@"Count of   n1: %i",[n1 retainCount]);
    NSLog(@"Address of n : %p", n);
    NSLog(@"Address of n1: %p", n1);
Run Code Online (Sandbox Code Playgroud)

我得到的另一个奇怪的事情是关于%i,说它实际上返回了一个uint,所以我将%i替换为%u,现在我得到了一个非常长的retainCount数字 - 4294967295

有点困惑,有什么想法吗?

提前致谢

macos reference-counting objective-c foundation ios

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

线程安全性C++/CX WinRT指针的引用计数

根据用例,我的印象是对WinRT对象的引用计数是线程安全的.但我遇到了一个我不知道其他任何解释方式的错误.例如,以下代码崩溃很快:

ref class C sealed {
public:
    C() { }
    virtual ~C() {}
};

[Windows::Foundation::Metadata::WebHostHidden]
public ref class MainPage sealed {
public:
    MainPage() : _latest(nullptr) {
        InitializeComponent();
        Windows::System::Threading::ThreadPool::RunAsync(
            ref new Windows::System::Threading::WorkItemHandler(
                this, 
                &MainPage::SetLatest));
        Windows::System::Threading::ThreadPool::RunAsync(
            ref new Windows::System::Threading::WorkItemHandler(
                this, 
                &MainPage::OnRendering));
    }
    virtual ~MainPage(){}
private:
    C^ _latest;
    void SetLatest(Windows::Foundation::IAsyncAction^ operation){
        while (true) {
            _latest = ref new C(); 
        }
    }
    void OnRendering(Windows::Foundation::IAsyncAction^ operation) {
        while (true) {
            auto c = _latest;
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

C^当读/写比赛时,WinRT指针(即类似的ref类)是否应该被正确引用?是否有一个我不知道的单独问题,造成这次崩溃?

pointers reference-counting windows-runtime c++-cx

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

有没有办法手动减少Python中对象的引用计数?

我正在使用一个存在一些内存问题的C库.我已经确定有时它会过早地减少引用计数,导致段错误,并设法通过保持对象列表来扩大引用计数来解决这个问题.另一方面,我还确定了引用计数过高的特定情况.有没有办法解决这些情况,从Python代码,有目的地减少引用计数?

我知道这是hackish,绝不是干净的代码或任何东西,但我必须以某种方式处理有缺陷的C库,看起来这可能比找出C代码中的问题更容易(幸运的是它是开放的) -source),修复它,然后在我必须支持的所有平台上重新编译它.

c python reference reference-counting

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

iOS 7中引用计数的更改?

我正在努力修复一些未使用ARC构建的遗留应用程序上的iOS 7显示问题,并且dealloc在iOS版本6和7之间的方法遇到了一些不一致的行为.我找不到任何其他提及这些任何文件或社区讨论的变化,所以我想知道这里是否有人可以了解这里发生的事情?

我以前的代码(在iOS6中工作,看起来像这样):

@interface MyViewController()
@property (retain) AdHandler *adHandler;
@end

@implementation MyViewController

@synthesize adHandler = _adHandler;

- (id) initWithAdHandler:(AdHandler*)anAdHandler
{
    self = [super init];
    _adHandler = [anAdHandler retain];
    return self;
}

- (void)dealloc
{    
    [super dealloc];

    [_adHandler release];
    _adHandler = nil;
}

...

@end
Run Code Online (Sandbox Code Playgroud)

当通过在iOS 6中单步调试代码,我发现后dealloc声明中,[_adHandler retainCount]仍然是积极的,而对象仍然是可用的.

然而,在iOS 7中,在dealloc语句之后,retainCount以某种方式命中零,并且_adHandler对象已经dealloc'd,因此我的调用release导致了EXC_BAD_ACCESS.

我可以通过在[adHandler release]通话前移动我的电话来解决这个dealloc问题,但我的问题是为什么会发生这种情况?为什么dealloc发布它不负责的对象?有没有关于为什么dealloc行为以这种方式改变的任何文档?

xcode reference-counting objective-c ios ios7

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

__del__在未分配的python对象上的行为

有史以来第一个问题,对不起,如果有人问过 - 我做了搜索,但我找不到任何似乎回答它的东西.

我一直试图理解python __del__方法的行为,因为我需要它来对包装的C代码执行一些清理.

我的理解__del__是当对象的引用计数达到零时del调用,而不是在对象引用上调用时调用.这让我相信实例化一个没有赋值的对象会在__init__之后__del__立即调用,但事实并非如此,如下面的代码所示:

class Foo():
   def __init__(self):
      print "Hello"
   def __del__(self):
      print "Goodbye"

Foo()
Hello
<__main__.Foo instance at 0x7fb943075a28>
Run Code Online (Sandbox Code Playgroud)

谁能解释一下这里发生了什么?提前致谢.

python reference-counting del

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

C++模板引用计数本机类型

我需要int在C++中引用count (文件描述符).我正在查看新的C++ 11和C++ 14文档,看看是否有用于引用计数的模板.它是否真的不存在于过去几年中添加到C++中的新东西的一部分,还是我在文档中错过了它?

注意我不是在寻找人们提供自己的解决方案作为StackOverflow问题的一部分!我只想知道我应该使用的是"官方"解决方案.

c++ reference-counting c++11 c++14

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