这也是我在MiškoHevery 关于依赖注入处理谷歌会谈的评论中提出的一个问题,但它已被埋没在评论中.
我想知道将依赖关系连接在一起的工厂/构建器步骤如何才能在C++中工作.
即我们有一个依赖于B的A类.构建器将在堆中分配B,在A的构造函数中传递指向B的指针,同时在堆中分配并返回指向A的指针.
谁事后清理?建造者在完成后清理它是否好?它似乎是正确的方法,因为在谈话中它说构建器应该设置预期具有相同生命周期的对象,或者至少依赖关系具有更长的生命周期(我也有一个问题).我在代码中的意思是:
class builder {
public:
builder() :
m_ClassA(NULL),m_ClassB(NULL) {
}
~builder() {
if (m_ClassB) {
delete m_ClassB;
}
if (m_ClassA) {
delete m_ClassA;
}
}
ClassA *build() {
m_ClassB = new class B;
m_ClassA = new class A(m_ClassB);
return m_ClassA;
}
};
Run Code Online (Sandbox Code Playgroud)
现在,如果有一个依赖项预计持续时间超过我们注入的对象的生命周期(比如ClassC就是依赖项)我明白我们应该将构建方法改为:
ClassA *builder::build(ClassC *classC) {
m_ClassB = new class B;
m_ClassA = new class A(m_ClassB, classC);
return m_ClassA;
}
Run Code Online (Sandbox Code Playgroud)
你最喜欢的方法是什么?
假设我已将库foo.so.1.1.1添加到包含在路径中的路径/etc/ld.so.conf
当我在系统上运行ldconfig时,我得到链接foo.so.1.1和foo.so.1到foo.so.1.1 0.1
如何更改行为以获取foo.so.1.1.1的foo.so链接?
是否有可以在编辑器中显示缩进指南的eclipse设置或插件?类似于Visual Studio 的Codekana插件(不那么花哨也行).重要的是它适用于PyDev.
Html5 Boilerplate使用以下技巧回退到本地存储的JQuery,如果从谷歌CDN抓取它失败:
<script>!window.jQuery && document.write(unescape('%3Cscript src="js/libs/jquery-1.4.2.js"%3E%3C/script%3E'))</script>
Run Code Online (Sandbox Code Playgroud)
你会如何实现这个技巧来为jQuery UI执行相同的技巧?
我的问题与之前提出的问题非常相关,但我需要一些实用的建议.
我手里拿着"有效地使用遗留代码",当我在我正在研究的项目中阅读时,我正在使用本书中的建议.该项目是一个C++应用程序,由几个库组成,但代码的主要部分被编译为单个可执行文件.当我不得不触摸某些内容时,我正在使用googletest将单元测试添加到现有代码中.
我的问题是我如何设置我的构建过程,以便我可以构建我的单元测试,因为有两个不同的可执行文件需要共享代码,而我无法从我的"测试中"应用程序中提取代码到库.现在我已经为应用程序创建了我的构建过程,该应用程序将单元测试链接与主应用程序的构建过程中生成的目标文件相关联,但我真的不喜欢它.有什么建议吗?
有没有办法通过qmake获取用户使用的编译器的版本和供应商?我需要的是在使用g ++ 3.x时禁用构建项目的某些目标,并在使用g ++ 4.x时启用它们.
更新:大多数答案都针对预处理器.这是我想要避免的.我不希望为特定的编译器版本构建目标,并且我希望由构建系统做出此决定.
我为什么要选择使用一个而不是另一个?在哪些情况下?
我主要关注桌面应用程序,个人而言,我发现简单易用的对话框更容易使用.
我的构建过程包括Qt的qmake Makefile生成器和与linux捆绑在一起的典型make实用程序.
我的应用程序由几个共享库组成,主应用程序与它们相关联.
如何在我的库上应用典型的linux版本控制方案?(使用版本2 - >指向foo.so.2的链接,指向带有ldconfig生成链接的foo.so.2.yz).
答案不一定要特定于我的构建过程.