我有一个像结构的图形.我不确切知道何时以传统的Delphi方式销毁对象,而是想实现类似引用计数对象的东西.我知道我可以使用像object.GetReference和object.lease而不是Free,并使用私有变量进行引用计数,但有没有更好的方法?
谢谢
我有一个Iphone应用程序,它使用了由Erica Sedun编写的优秀ABContactHelper库并在github上发布
现在随着XCode4和引用计数支持的发布,它会导致很多错误.我已经查看了github上的forks,但似乎没有更新到使用引用计数的XCode 4.我试图自己更新它,但它缓慢且容易出错.我尝试过自动重构支持,但无济于事.
有没有人知道另一个AddressBook包装器,它提供了一个简单的界面来与IPhone AddressBook进行交互?
iphone reference-counting objective-c abaddressbook xcode4.2
关于智能指针和内存分配我处于两难境地.
在我的智能指针类中,我通过引擎中的内存模块拥有自己的分配内存方式.
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
我正在尝试增强非ARC应用程序中的内存分配.有些对象即使引用计数为0,也会在两个快照之间列为持久对象.
这是我的快照视图: 
让我们在第一个快照(0x6deb180)中选择所选的LSBookChapter.这是该对象的历史:

为什么该对象没有被释放?如果引用计数为0,我无法弄清楚当我保留该对象时..
任何人都可以帮助,我有一些代码,我正在检查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
有点困惑,有什么想法吗?
提前致谢
根据用例,我的印象是对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类)是否应该被正确引用?是否有一个我不知道的单独问题,造成这次崩溃?
我正在使用一个存在一些内存问题的C库.我已经确定有时它会过早地减少引用计数,导致段错误,并设法通过保持对象列表来扩大引用计数来解决这个问题.另一方面,我还确定了引用计数过高的特定情况.有没有办法解决这些情况,从Python代码,有目的地减少引用计数?
我知道这是hackish,绝不是干净的代码或任何东西,但我必须以某种方式处理有缺陷的C库,看起来这可能比找出C代码中的问题更容易(幸运的是它是开放的) -source),修复它,然后在我必须支持的所有平台上重新编译它.
我正在努力修复一些未使用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行为以这种方式改变的任何文档?
有史以来第一个问题,对不起,如果有人问过 - 我做了搜索,但我找不到任何似乎回答它的东西.
我一直试图理解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)
谁能解释一下这里发生了什么?提前致谢.
我需要int在C++中引用count (文件描述符).我正在查看新的C++ 11和C++ 14文档,看看是否有用于引用计数的模板.它是否真的不存在于过去几年中添加到C++中的新东西的一部分,还是我在文档中错过了它?
注意我不是在寻找人们提供自己的解决方案作为StackOverflow问题的一部分!我只想知道我应该使用的是"官方"解决方案.