草庐IT

Binding_New_Objective-C_Types

全部标签

C++ 引用类型作为 Objective-C++ 中的实例变量

C++引用类型作为实例变量在Objective-C++中是被禁止的。我该如何解决这个问题? 最佳答案 您不能明智地使用引用作为实例变量,因为无法初始化实例变量并且无法重新设置引用。替代方法可能是简单地使用(可能是智能的)指针。让您更接近C++类行为的另一种可能性是为您的C++成员使用PIMPL样式的成员:structCppImpl{SomeClass&ref;CppImpl(SomeClass&ref):ref(ref){}};@interfaceA:NSObject{CppImpl*pimpl;}-(id)initWithRef:

c++ - 在 C++ 中重载 new、delete

我遇到这一行是stroustrup运算符函数必须是成员或至少采用一个用户定义类型的参数(重新定义new和delete运算符的函数不需要)。operatornew和operatordelete不是将用户定义的类型作为它们的参数之一吗?这是什么意思,我在这里遗漏了什么吗 最佳答案 Stroustrup的引述显然适用于运算符重载。C++语言仅支持用户定义类型的运算符重载。这意味着重载函数(operator)必须是用户定义类型的成员,或者是具有至少一个用户定义类型参数的独立函数。这正是相关引述的意思。但独立(非成员(member))oper

c++ - 将 _msize 与 new[] 一起使用安全吗?

将Microsoft特定的_msize()函数与新的[]一起使用是否安全?例子:int*i=newint[100];size_ts=_msize(i);coutMSDN确实只描述了malloc&Co的用法。我已经使用VisualStudio2010测试了代码,它看起来可以工作!但我想知道是否有一些预期的问题或任何特殊情况? 最佳答案 如果有人为您的类型覆盖operatornew,则可能会出现问题。写起来一样简单constsize_ts=100;int*i=newint[s];或者,如果你真的写C++std::vectori(100)

c++ - C++ 和 Objective C 中的多态性

我是ObjectiveC的新手,我想更清楚地理解protocol的概念。@protocolprotocolName@optional@required@end我可以将@optional部分与virtualfunction和@required部分与C++的purevirtualfunction相关联吗?@protocol是Objective-C创建接口(interface)和抽象类的方式吗? 最佳答案 Is@protocoliswayofObjective-Ctocreateinterfaceandabstractclass?没错。C

c++ - 一起使用 "new"和 "if"语句 - 语法相关

对不起大家。我的意思是在我发布的代码中有一个星号。请重新回答。我正在为同事做代码审查,我看到弹出以下语句:if((someClass*object1=newsomeClass)){//Dowork}这个说法和下面的说法一样吗?someClass*object1=newsomeClass;if(object1){//Dowork}我只是想看看它们是否相等,这样我们就不会遇到任何错误。 最佳答案 您不能在第一种形式的if条件内创建对象,除非类型立即出现在括号内,因此:if(someClass*object1=newSomeclass(.

c++ - new 不分配内存

这应该每秒用大约100MB填满我的内存。我使用gnome-systemmonitor和htop跟踪内存使用情况。但不知何故它没有。为什么?#include"unistd.h"#includeintmain(intargc,char*argv[]){while(true){std::cout运行:g++-std=c++11-O0main.cpp;./a.out 最佳答案 因为您没有使用它,所以Linux会进行惰性分配,因此在您使用它之前它不会实际映射任何内存页。如果你输入一些代码:char*test=newchar[100000000

c++ - 使用 new 并能够检查指针是否为 0(空)

有人告诉我这样做,int*i=newint();我将无法检查我的指针是否为0。new发送异常以防失败。但是,如果我出于某种原因不想使用异常怎么办。有什么方法可以检查我的指针是否正确分配? 最佳答案 阅读文档:http://www.cplusplus.com/reference/new/operator%20new/(2)nothrowallocationSameasabove(1),exceptthatonfailureitreturnsanullpointerinsteadofthrowinganexception.以及示例:st

c++ - 我应该在我的 C++ WIn32 应用程序中重写 operators new/delete

我知道Microsoft自己曾经建议通过调用HeapCreate()和HeapAlloc()来覆盖operatornew,但那是不久前的事了。有关详细信息,请参阅KB139638。在Win32上重写new/delete是否仍然有益?推荐的实现方式是什么?TIA。 最佳答案 这篇文章说你可以做,而不是说你应该。其中的代码写得很糟糕,一点也不有趣,而且它不是线程安全的。通常,提供的new和delete实现可以很好地满足所有一般编程需求。只有当您确定了重新实现可以解决的特定问题时,您才应该考虑重新实现它们。

c++ - 如何解决出现在 Objective-C++ 而不是 Objective-C 中的链接错误?

我正在将我的AppDelegate文件从.m转换为.mm(Objective-C到Objective-C++),以便我可以访问用Objective-C++编写的第三方库。在Objective-C中,我的应用程序委托(delegate)构建并运行良好。但是当我更改扩展名时,项目构建并且出现链接错误,所有这些都缺少我使用的用C编写的静态库中的符号。这些错误是具有以下格式的经典链接错误:“MyFunction(arguments)”,引用自:-MyAppDelegate.o中的[MyAppDelegatemyMethod]找不到符号所有的问题都在应用委托(delegate)对象中。我知道我已

c++ - 如何在 Objective-C 中包装 C++ 库?

我有一个包含数据结构实现的C++库(仅限.h),我想在我的iPhone应用程序中使用它。首先,我在objective-C++中编写了一个包装器作为一个类,通过组合,它具有C++类的ivar。然后我“不得不”将包装器类扩展名更改为.mm,这看起来不错。但是后来我必须将这个包装的类文件包含到其他几个文件中,所以我也必须更改它们的扩展名(以防止一波编译时错误)。我说的对吗?有没有办法将.mm扩展名“限制”为几个文件?(从而防止名称冲突等)编辑:更多可能有用的信息,我使用LLVM1.5作为编译器(我注意到编译时错误的数量从GCC4.2到LLVM1.5不等,但我不确定这是否意味着什么,因为我没有