标签: memory-management

将智能指针作为参数传递给函数

我正在实施一个smartpointer模板,有一件事让我感到困惑; 将smartpointer作为参数传递给另一个函数时,如何增加引用计数器?我重载什么操作符来增加引用计数?

例如:

class test
{
   test() {  }
   ~test() {  }
};

void A() 
{
    SmartPointer<test> p;
    B(p);
}

void B(SmartPointer<test> p)
{
    C(p);
}

void C(SmartPointer<test> p)
{
    // p ref count is still 1 and will be destroyed at end of C
}
Run Code Online (Sandbox Code Playgroud)

谢谢

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

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

为什么retainCount返回-1

据我所知,如果一个对象的保留计数变为0,则会调用dealloc.但是我将保留计数设置为-1.这是什么意思?

我使用以下代码 -

    Demo *obj1 = [[Demo alloc] init];
    NSString *s = [[NSString alloc] initWithString:@"mithilesh"];
    NSString *s1 = [NSString stringWithString:s];
    [s release];
    object_setInstanceVariable(obj1, [propertyName cString], s1);
    //printing retain count 
    NSLog(@"retain count of name = %i",[obj1.name retainCount]);
Run Code Online (Sandbox Code Playgroud)

输出:

   retain count of name = -1
Run Code Online (Sandbox Code Playgroud)

方法stringWithString返回的字符串:何时获取释放?

iphone memory-management objective-c ios4 retaincount

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

.Net为每个dll和exe创建1个堆栈(用于存储值类型)或每个程序创建1个堆栈

我正在创建一个将由演示程序使用的服务.我是一个将类型定义为类或结构的分支..Net为每个dll和exe创建1个堆栈(用于存储值类型)或每个程序创建1个堆栈.我非常确定它为每个程序创建一个托管堆但不确定堆栈.请帮我.

谢谢,Omkar

.net c# java memory-management

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

如何处理大型指针结构

我编写的应用程序通过外部服务将数据推送到某个服务器.我必须使用一个定义的结构,它看起来像这样:

class A {
    B *b; // Another class built the same principle
    C *c; // And another one
    ...
};
Run Code Online (Sandbox Code Playgroud)

它在某处归结为

class XY {
    double *some_val;
    std::string *another_val;
    ...
};
Run Code Online (Sandbox Code Playgroud)

我面临的问题是,如果你愿意,我只处理指针指针,我还没有想出处理这些结构的最佳方法.

我自己可以用new和处理内存管理delete,但是之后我不得不做大量的清理工作,而且我忘记清理一些东西,而我的程序漏洞在我看来太高了.

我可以在本地声明这些类并以这种方式填充它们,但是我必须事先声明每个变量,所以我必须在我可以做任何事情之前分析类层次结构,之后它仍然会变得非常混乱.

智能指针也出现在我脑海中,但由于它们基本上是一个包装指针的类,我必须事先声明它们,相比之前方法的优势似乎很小.

有没有人知道一个聪明的,最重要的是,可读/可维护的方法来处理这些庞大的指针结构?

更新:

如果有人遇到同样的问题,这是我现在的方法(虽然我仍然觉得它很乱!):

#include <boost/shared_ptr.hpp>
#include <boost/any.hpp>

class A {
    B *b_;
    double *d_;
};

int main() {
    std::vector<boost::any> vp;

    // Create instance of A
    vp.push_back(boost::shared_ptr<A>(new A));
    A *a = boost::any_cast<boost::shared_ptr<A> >(vp.back()).get();

    // Create instance of B in A
    vp.push_back(boost::shared_ptr<B>(new B)); …
Run Code Online (Sandbox Code Playgroud)

c++ pointers memory-management

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

char*buf = malloc(sizeof(char*)*16)vs char buf [sizeof(char*)*16]

我正在读一个C代码

char * buf = malloc(sizeof (char *) * 16)

代替

char buf[sizeof (char *) * 16]

有什么不同?好吧,我觉得第一个表达不必要,如果realloc()不叫,或者我错了思考?

c arrays memory-management

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

stringWithFormat是否创建了retain +1实例?

我在NSString课堂上宣布一个类型的ivar .要初始化此ivar的值,我使用以下代码:

NSString *myVar;

-(void)inAnyMethod
{
   myVar = [NSString stringWithFormat:@"%@",theValue];
}
Run Code Online (Sandbox Code Playgroud)

我必须释放这个伊娃吗?根据我的理解,这不是我的责任.但在大多数情况下,我以这种方式使用的字符串会导致泄漏.

我错过了什么?

memory-leaks memory-management objective-c nsstring retain

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

内存管理,ARC - 什么是零?

背景 -

我在项目上使用自动引用计数.根视图是表格视图(主/细节设置),显示"幻灯片放映"列表.单击一个表格单元格,您将进入详细视图,其中包含一个带有视图的滚动视图(viewController.view)(这是"幻灯片放映").每个幻灯片都有一个前盖和后盖(相同的视图控制器格式不同),夹着可变数量的页面.以下是加载幻灯片放映的代码:

- (void)loadScrollView
{    
// The front and back cover are set in Interface Builder because they
// are reused for every slide show, just labels are changed.
[self.scrollView addSubview:self.frontCoverViewController.view];
[self.frontCoverViewController setCoverTitle:_data.name creationDate:_data.creationDate isFrontCover:YES];
[self.pagesArray addObject:self.frontCoverViewController];

for (int i = 0; i < [self getTotalNumberOfComps]; i++) 
{
    PageViewController *pageView = [[PageViewController alloc] init];
    pageView.data = [_compsArray objectAtIndex:i];

    [_scrollView addSubview:pageView.view];
    pageView.data.imgView = pageView.imageView;
    pageView.slideShowViewController = self;
    [_pagesArray addObject:pageView];
}

[self.scrollView addSubview:self.backCoverViewController.view];
[self.backCoverViewController setCoverTitle:_data.name creationDate:_data.creationDate isFrontCover:NO];
[self.pagesArray addObject:self.backCoverViewController];

[self.scrollView bringSubviewToFront:_frontCoverViewController.view]; …
Run Code Online (Sandbox Code Playgroud)

iphone memory-leaks memory-management ios

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

iOs高内存使用率

现在我有一个ARC项目,它使用超过6米的内存推送聊天ViweController(UItableview与自定义单元格).我不知道为什么会这样.最有趣的是我无法确定它需要太多内存的原因.这是我的仪器截图:

在此输入图像描述

在更详细的视图中,它看起来像:

在此输入图像描述

我认为libRip.A.dylib需要太多内存.你有什么想法吗?

请解释一下,什么是奇怪的libRip.A.dylib库?

memory-management instruments ios

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

objective c语法将NSNumber转换为int

在内存和计算时间方面,最好将int转换为:

int thisLetterInt = (int)[(NSNumber *)[levelSavedSolutionArrayFIX objectAtIndex:i] intValue];
Run Code Online (Sandbox Code Playgroud)

要么

int thisLetterInt = [[levelSavedSolutionArrayFIX objectAtIndex:i] intValue];
Run Code Online (Sandbox Code Playgroud)

还是完全相同?

另外,在任何一种情况下,我都不负责释放吗?

iphone optimization memory-management casting objective-c

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

在ARC下保留实例变量的等价物

我正在使用RestKit开发RESTful应用程序.我有一个实际处理请求的包装器对象,甚至可以作为delegatefor RKObjectManager.我遇到了一个与ARC如何处理实例变量并保留它们有关的问题,我很清楚我不明白ARC是如何工作的.

所以当我这样做时,它会失败(与发送到解除分配的实例的消息有关的错误)

MyTestClient *testClient = [[MyTestClient alloc] init];

但是当我宣布一个房产并做到这一点时,一切都很好:

self.testClient = [[MyTestClient alloc] init];

根据我的理解,在ARC下,实例变量始终strong是默认的,但它的生命周期是声明它的方法的范围.

既然我不能做[testClient retain],我唯一的选择是把它作为财产吗?

memory-management objective-c ios restkit automatic-ref-counting

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