深度克隆一组互连对象的最佳方法是什么?例:
class A {
B theB; // optional
// ...
}
class B {
A theA; // optional
// ...
}
class Container {
A[] a;
B[] b;
}
Run Code Online (Sandbox Code Playgroud)
显而易见的事情就是走向对象并深入克隆一切,因为我来到它.然而,这会产生一个问题 - 如果我克隆一个A
包含a 的那个B
,并且它B
也在Container
那里,B
那么克隆后我将克隆两次Container
.
下一个逻辑步骤是Dictionary
在克隆之前创建并查找每个对象.然而,这似乎可能是一个缓慢而无法解决的问题.
有什么想法吗?
在受限制的设备上,我经常发现自己在2个线程与2个bool之间"伪造"锁定.每个只由一个线程读取,只由另一个线程写入.这就是我的意思:
bool quitted = false, paused = false;
bool should_quit = false, should_pause = false;
void downloader_thread() {
quitted = false;
while(!should_quit) {
fill_buffer(bfr);
if(should_pause) {
is_paused = true;
while(should_pause) sleep(50);
is_paused = false;
}
}
quitted = true;
}
void ui_thread() {
// new Thread(downloader_thread).start();
// ...
should_pause = true;
while(!is_paused) sleep(50);
// resize buffer or something else non-thread-safe
should_pause = false;
}
Run Code Online (Sandbox Code Playgroud)
当然在PC上我不会这样做,但在受限制的设备上,似乎读取一个bool
值比获得锁定要快得多.当然,sleep(50)
当需要更改缓冲区时,我需要权衡较慢的恢复(参见" ").
问题 - 它是完全线程安全的吗?或者在伪造这样的锁时我需要注意隐藏的陷阱吗?或者我应该不这样做?
我(最后)开始学习正则表达式,我想知道这两个模式字符串之间是否有任何明显的区别.我正在尝试匹配诸如" Title=Blah
"之类的行,并在两组中匹配"Title"和"Blah".
问题出现在像" Title=The = operator
" 这样的标题上.以下是解决问题的两种选择:
^([^=]+)=(.+)$
^(.+?)=(.+)$
Run Code Online (Sandbox Code Playgroud)
这两者之间是否有任何区别,无论是性能方面还是功能方面?
我在C语言中遇到过几次问题:
original | included & ~excluded // BAD
Run Code Online (Sandbox Code Playgroud)
由于优先级,这解析为:
original | (included & ~excluded) // '~excluded' has no effect
Run Code Online (Sandbox Code Playgroud)
有没有人知道按位运算符的三个独立优先级的原始设计决策背后是什么?更重要的是,你同意这个决定,为什么?
在我无法修改的类中实现多态行为的最佳方法是什么?我目前有一些代码,如:
if(obj is ClassA) {
// ...
} else if(obj is ClassB) {
// ...
} else if ...
Run Code Online (Sandbox Code Playgroud)
显而易见的答案是向基类添加一个虚方法,但遗憾的是代码在不同的程序集中,我无法修改它.有没有比上面的丑陋和慢速代码更好的方法来处理这个问题?
我注意到(至少在Win32上)在可执行文件中,代码段(.text)具有"读取"访问位设置,以及"执行"访问位.是否有任何真正合理的理由让代码自己阅读而不是自己执行?我认为这是其他部分的用途(例如.rdata).
(具体来说,我在谈论IMAGE_SCN_MEM_READ
.)
我最近遇到过这种咆哮.
我不太明白文章中提到的一些要点:
delete
vs 的小烦恼delete[]
,但似乎认为它实际上是必要的(对于编译器),而没有提供解决方案.我错过了什么?在"专业分配器"一节中,在功能中f()
,似乎可以通过以下方式替换分配来解决问题:(省略对齐)
// if you're going to the trouble to implement an entire Arena for memory,
// making an arena_ptr won't be much work. basically the same as an auto_ptr,
// except that it knows which arena to deallocate from when destructed.
arena_ptr<char> string(a); string.allocate(80);
// or: arena_ptr<char> string; string.allocate(a, 80);
arena_ptr<int> intp(a); intp.allocate();
// or: arena_ptr<int> intp; intp.allocate(a);
arena_ptr<foo> fp(a); fp.allocate();
// or: arena_ptr<foo>; fp.allocate(a);
// use templates …
Run Code Online (Sandbox Code Playgroud)
我试图__file__
在django下使用python 变量检索文件路径,虽然我得到了正确的路径.这种行为有点奇怪.这是我附上的示例代码,请让我知道为什么这样做.
from django.shortcuts import render_to_response
import datetime
class WebServer():
def __init__(self):
pass
def display_first_page(self, request):
print "File Path: ", __file__
return render_to_response('Hello')
Run Code Online (Sandbox Code Playgroud)
我已将此代码存储在给定位置:C:\ Django_example\MySample.理想情况下它应该返回类似C:\ Django_example\MySample\webserver.py的内容,但我得到的是C:\ Django_example\MySample\..\MySample\webserver.py.有人可以指出我正确的方向.
提前谢谢,
Rupesh
c# ×2
allocation ×1
architecture ×1
c++ ×1
clone ×1
django ×1
django-views ×1
executable ×1
inheritance ×1
locking ×1
memory ×1
new-operator ×1
polymorphism ×1
python ×1
regex ×1
winapi ×1