请考虑以下代码.
using boost::shared_ptr;
struct B;
struct A{
~A() { std::cout << "~A" << std::endl; }
shared_ptr<B> b;
};
struct B {
~B() { std::cout << "~B" << std::endl; }
shared_ptr<A> a;
};
int main() {
shared_ptr<A> a (new A);
shared_ptr<B> b (new B);
a->b = b;
b->a = a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有没有输出.没有调用desctructor.内存泄漏.我一直认为智能指针有助于避免内存泄漏.
如果我需要在类中进行交叉引用,我该怎么办?
好吧,我有一个UITableView自定义UITableViewCell的,每个包含一个UIImageView图像是通过一个异步下载的NSURLConnection.所有非常标准的东西......
问题是,当表格滚动时,新图像会在后台正确下载,但在表格停止移动之前不会出现RENDERED.
即使它正在移动,我如何让表格呈现它的内容?谢谢.
- 更新 -
仔细看后,我发现NSURLConnection委托方法在表停止滚动之前不会触发.不知道为什么.任何帮助都会很棒.
以下代码仅在复制构造函数可用时有效.
当我添加print语句(via std::cout)并使复制构造函数可用时,它不会被使用(我假设有这样的编译器技巧,以删除不必要的副本).
但是在输出operator <<和plop()下面的函数(我创建一个临时对象)中我都没有看到复制构造函数的需要.当我通过const引用(或者我做错了)传递所有内容时,有人可以解释为什么语言需要它.
#include <iostream>
class N
{
public:
N(int) {}
private:
N(N const&);
};
std::ostream& operator<<(std::ostream& str,N const& data)
{
return str << "N\n";
}
void plop(std::ostream& str,N const& data)
{
str << "N\n";
}
int main()
{
std::cout << N(1); // Needs copy constructor (line 25)
plop(std::cout,N(1)); // Needs copy constructor
N a(5);
std::cout << a;
plop(std::cout,a);
}
Run Code Online (Sandbox Code Playgroud)
编译:
[Alpha:〜/ X] myork%g ++ -v
使用内置规格.
目标:i686-apple-darwin10
配置:/ var/tmp/gcc/gcc-5646~6/src/configure --disable-checking --enable-werror --prefix …
我刚刚将一个项目从2008升级到2010 Beta 2,而StyleCop现在报告SA1305(匈牙利表示法)警告变量名称前缀为'is'.'Is'肯定在允许的前缀列表中.
这是一个已知的问题?还有其他人遇到过这个问题吗?该代码肯定是在2008年没有任何警告的情况下编译的.
更新:事实证明,这可以在Visual Studio中按预期工作,但然后通过MSBuild失败.请参阅下面的答案了解原因.
我们希望识别并显示代理Web服务器后面运行的Java应用程序的服务器和端口.这意味着getServerName()和getServerPort()返回代理的服务器名称及其端口(80).
我们在一个物理盒上运行两个应用服务器实例,因此每个盒子有两个活动端口,即9080,9081 <Application Server Name>:<Application Server Port>.显示我想要的内容.
有任何想法吗?我是一个完整的Java noob,对不起,如果这是一个基本问题.
我正在使用Enterprise Architect(sparxsystems)来创建UML 2.0通信图.我希望消息的编号与此示例类似:http://www.sparxsystems.com.au/uml_tool_guide/uml_dictionary/communicationdiagram.html.
如何从2,3开始收到消息等?每当我创建一条新消息时,它都会将其创建为1.x. 我看到如何重新排序消息,但不知道如何开始新的序列.
该示例提到"新的数字段开始于新的处理层",但未提及如何定义新的处理层.
我有一个视图,返回四列数据以推送到外部程序.当我只是查询视图("Select*from schema.view_name")时,我得到了10353行.当我运行创建视图的实际SQL(我实际上复制并粘贴了Oracle存储的内容,减去"创建或替换"语句)时,我得到了238745行.
有什么想法可能会发生吗?
我NSMutableArray *categories在我的视图控制器.h文件中声明了一个,并为它声明了一个属性.
在我的.m文件中委托的parser:foundCharacters:方法中NSXMLParser,我有这个代码:
-(void)parser:(NSXMLParser *) parser foundCharacters:(NSString *)string
{
if (elementFound)
{
element = string;
[self.categories addObject:element];
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我[self.categories addObject:element]在调试模式中踩到它后将鼠标悬停在线上时,XCode告诉我大小为0x0,0个对象.我的XML文件中有3个元素,因此数组中应包含3个项目.
我错过了一些非常明显的东西,我无法弄清楚是什么.
我知道基本的区别,因为ReleaseComObject只减少一些计数器并将其FinalReleaseComObject减少到零.
所以我通常听到的是,调用FinalReleaseComObject因为那时你确定COM对象真的被释放了.
但这让我想知道,这个反击有一点对吗?如果你总是打电话,你不打破这种机制吗FinalReleaseComObject?如果在您打电话之前该计数器不是一个,那么ReleaseComObject可能没有理由吗?
什么可能导致它高于一个不应该?
提前致谢.
PS:我的COM体验只包括使用Excel Interop.不确定这个问题是否属于该域的本地问题(即在Office Interop之外,FinalReleaseComObject不经常使用).
该文章丹提及使用会谈ReleaseComObject时,即可大功告成.据我从文章中了解,这是正常的方式.我认为,如果你这样做,它应该工作正常.在对文章的评论中,作者建议有人ReleaseComObject在循环中调用直到它真正发布(该文章来自2006年,所以这与调用类似FinalReleaseComObject).但他也表示这可能是危险的.
如果你真的想让RCW在代码中的某个特定点调用Release(),你可以在循环中调用ReleaseComObject()直到返回值达到零.这应该确保RCW将调用Release().但是,如果您这样做,请注意,当其他托管引用尝试使用该RCW时,它将导致异常."
这让我相信总是打电话确实不是一个好主意FinalReleaseComObject,因为你可以在其他地方引起例外.正如我现在所看到的那样,如果你绝对确定可以,你应该只打电话给你.
不过,我对此事的经验不多.我不知道怎么可以肯定.如果计数器在不应该增加的情况下增加,那么解决这个问题是不是更好?如果是这样,那么我会说FinalReleaseComObject更多的是黑客而不是最佳实践.
我有一个主键是一个varchar(255)的表.出现了一些情况,其中255个字符是不够的.我尝试将字段更改为文本,但是我收到以下错误:
BLOB/TEXT column 'message_id' used in key specification without a key length
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?
编辑:我还应该指出这个表有一个包含多列的复合主键.
c++ ×2
sql ×2
.net ×1
boost ×1
com ×1
diagram ×1
interop ×1
iphone ×1
java ×1
memory-leaks ×1
mysql ×1
objective-c ×1
plsql ×1
shared-ptr ×1
stylecop ×1
uiimageview ×1
uitableview ×1
uml ×1
view ×1
websphere ×1