什么是实现以下工作流的首选方法与任何Git或Subversion (我在更多的利益Git版本,但比较肯定将是有益的):
假设我们最近发布了该产品的主要版本,并且有一个特定的polisihin分支release-2.0.x.
然后开发继续进行,并将几个功能分支合并到
master/trunk(它们将成为即将到来的部分release-2.1.x).
现在,在某些时候,另一个特征(即,critical-feature)被开发并合并回来master/trunk.我们意识到这个功能非常重要,我们必须将它向后移植release-2.0.x.
这是针对所述情况的小型伪图.请注意,顶部的所有内容都会导致release-2.0.x和当前之间的树差异master/trunk并导致合并问题(否则我可以简单地合并critical-feature并避免编写此问题:)
(features added since 2.0.x, which
should not be backported)
^ ^ ^
| | | (code refactorings done
| | | in master/trunk)
\ | / (*) (*) (*)
-------------------------------------------------------> master/trunk
| |
| |
| |
\ release-2.0.x \ critical-feature
(should be backported)
Run Code Online (Sandbox Code Playgroud)
从 …
我无法理解为什么以下代码会产生内存泄漏(我使用的boost::shared_ptr是静态类实例).有人能帮助我吗?
#include <crtdbg.h>
#include <boost/shared_ptr.hpp>
using boost::shared_ptr;
#define _CRTDBG_MAP_ALLOC
#define NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
static struct myclass {
static shared_ptr<int> ptr;
myclass() {
ptr = shared_ptr<int>(NEW int);
}
} myclass_instance;
shared_ptr<int> myclass::ptr;
int main() {
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF |
_CRTDBG_CHECK_ALWAYS_DF | _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG));
return 0;
}
Run Code Online (Sandbox Code Playgroud) 假设我们有一些网格(参见CorelDraw的图解图片,它在"网格填充"工具中使用相同的技术).
替代文字http://www.sonic.net/mnitepub/pccafe/reviews/coreldraw9/meshfill.jpg
显然,这种网格由一组点表示,它们之间的线实际上是使用这组点确定的(可能以某种方式插值).该仪器还具有增加网格分辨率的按钮.
我的问题如下 - 如何计算这类事情?假设我有一些实际上代表网格的点(为了简单起见,我们甚至假设,"边界"上的点是静态的,不能移动).我想增加网格分辨率,例如,增加4倍(以便实际变成网格点的数量4 * initial_points_count).
如果我拥有的唯一数据是初始点矩阵,我应该如何计算新点的位置?
最快(甚至近似)的方法适合我,但我不知道在哪里搜索或如何开发这种算法.
谢谢.
如果出现未处理的异常,C++是否提供了一种"显示"可视化内容的方法?
我想做的是做一些事情,assert(unhandled exception.msg())如果它真的发生(如下面的例子):
void foo() {
throw std::exception("Message!");
}
int main() {
foo();
}
Run Code Online (Sandbox Code Playgroud)
我希望这种代码不会立即终止(因为异常未处理),而是显示自定义断言消息(Message!实际上).
那可能吗?
是否有人知道,如果boost::get为boost::variant是一个性能消耗操作或不.
现在我在性能关键部分重构一些旧代码,其中"变种"是通过容器为每种可能的类型和相应的实现enum.
显然,这很快,但很丑,现在当我必须重构代码以便它可以使用另一种类型时,我想摆脱旧的代码部分并替换它boost::variant.
此外,我不能简单地"描述两种变体并进行比较",因为这种重构是一种痛苦,而且非常耗时.
因此,如果有人知道boost::get<x>与泛型enum-based类型调度相比如何执行,我将非常感谢您分享这些知识.
还有另一种boost::variant<types>与自定义访问者一起使用的变体(如boost::variant文档中所述) - 这可能比boost::get我的情况更快吗?
谢谢.
这个问题可能与语言无关,但我将专注于指定的语言.
在处理一些遗留代码的过程中,我经常看到函数的例子,(在我看来,显然)在它们内部做了太多的工作.我说的不是5000 LoC怪物,而是关于在其中实施先行检查的功能.
这是一个小例子:
void WorriedFunction(...) {
// Of course, this is a bit exaggerated, but I guess this helps
// to understand the idea.
if (argument1 != null) return;
if (argument2 + argument3 < 0) return;
if (stateManager.currentlyDrawing()) return;
// Actual function implementation starts here.
// do_what_the_function_is_used_for
}
Run Code Online (Sandbox Code Playgroud)
现在,当调用这种函数时,调用者不必担心要满足的所有先决条件,并且可以简单地说:
// Call the function.
WorriedFunction(...);
Run Code Online (Sandbox Code Playgroud)
现在 - 应该如何处理以下问题?
就像,一般来说 - 如果此功能仅执行所要求的操作并将"先决条件检查"移至呼叫方:
if (argument1 != null && argument2 + argument3 < 0 && ...) {
// Now …Run Code Online (Sandbox Code Playgroud) 有关于如何处理IDisposable对象序列的一些建议吗?
例如,我有一个构建IEnumerable<System.Drawing.Image>序列的方法,在某些时候我需要手动处理这些对象,否则这可能会导致一些泄漏.
现在,有没有办法将Dispose()调用绑定到垃圾收集器操作,因为我希望这些对象在不再可以从其他代码部分访问的时刻处理好?
**或者你可以建议我采取其他方法吗?**
一般来说,这似乎是同样的问题,例如,在C++没有共享指针的非托管中,你可以有一个方法:
SomeObject* AllocateAndConstruct();
Run Code Online (Sandbox Code Playgroud)
然后你不能确定何时处理它,如果你不使用代码合同或不在评论中陈述某些内容.
我猜一次性物体的情况大致相同,但我希望有一个合适的解决方案.
我最近被告知我滥用异常来控制应用程序中的流量,所以我这是我试图以某种方式澄清情况.
在我看来,一个方法应该在遇到情况时抛出异常,这种情况无法在内部处理或者可能由调用方更好地处理.
那么 - 是否存在任何特定的规则集,可用于在开发应用程序时回答以下问题:
什么时候应该抛出一个异常,什么时候应该编写具有强大的nothrow保证的代码,这可能只是返回 bool表示成功或失败?
我应该尝试最小化情况的数量,当方法抛出异常时,或者相反,它应该最大化以在处理这些情况时提供灵活性吗?
我应该坚持在开发我的应用程序时使用的框架/运行时设置的异常抛出约定,还是应该包装所有这些调用,以便它们匹配我自己的异常抛出策略?
我还建议使用错误代码进行错误处理,这似乎非常有效,但从语法的角度来看很丑陋(同样,当使用它们时,开发人员失去了为方法指定输出的能力).你怎么看待这件事?
实施例为第三个问题(I用的I/O架构和遇到以下情况):
所描述的框架不使用异常来处理错误,但其他代码确实使用它们.我是否应该将所有可能的失败包裹起来
'???'并在这种情况下抛出异常?或者我应该将方法的签名更改为bool PrepareTheResultingOutputPath仅指示操作是否成功?
public void PrepareTheResultingOutputFile(
String templateFilePath, String outputFilePath)
{
if (!File.Exists(templateFilePath))
// ???
if (!Directory.MakePath(outputFilePath))
// ???
if (File.Exists(outputFilePath))
if (!File.Remove(outputFilePath))
// ???
if (!File.Copy(templateFilePath, outputFilePath)
// ???
}
Run Code Online (Sandbox Code Playgroud)
另一个例子 - 即使.NET Framework不遵循一些严格的异常抛出策略.一些方法被记录为抛出10多种不同的异常类型,包括普通的异常类型NullArgumentException,但其中一些只是返回bool以指示操作的成功或失败.
谢谢!
我提出了一个非常简单的问题,但遗憾的是我自己无法找到答案.
假设我有一些保存设置的数据结构,就像设置图一样.我有一个GetValue(const std::string& name)方法,返回相应的值.
现在我想弄明白 - 什么样的回报价值方法会更好.显而易见的意思是让我的方法表现得像
std::string GetValue(const std::string& name) const
Run Code Online (Sandbox Code Playgroud)
并返回对象的副本,并依赖于RVO的性能含义.
另一个意味着制作两种方法
std::string& GetValue(...)
const std::string& GetValue(...) const
Run Code Online (Sandbox Code Playgroud)
这通常意味着复制代码或使用一些邪恶的常量强制转换来使用其中一个例程两次.
#Q在这种情况下你会选择什么?为什么?
如果我愿意确定两张图像是否真的一起制作全景(或者像全景一样,例如包含"相同"的部分,显然有点变形),有人可以给我一个正确的方向.
c++ ×6
c# ×3
algorithm ×2
exception ×2
java ×2
boost ×1
collections ×1
disposable ×1
dispose ×1
function ×1
git ×1
handler ×1
memory-leaks ×1
merge ×1
mesh ×1
performance ×1
reference ×1
resolution ×1
return-value ×1
shared-ptr ×1
svn ×1
variant ×1