小编Rob*_*Rob的帖子

是否值得在析构函数中设置指向NULL的指针?

想象一下,我有一个分配内存的类(暂时忘记智能指针):

class Foo
{
public:
  Foo() : bar(new Bar)
  {
  }

  ~Foo()
  {
    delete bar;
  }

  void doSomething()
  {
    bar->doSomething();
  }

private:
  Bar* bar;
};
Run Code Online (Sandbox Code Playgroud)

除了在析构函数中删除对象之外,还值得将它们设置为NULL吗?

我假设在上面示例的析构函数中将指针设置为NULL是浪费时间.

c++

18
推荐指数
4
解决办法
9636
查看次数

您更喜欢C++中的显式名称空间还是"使用"?

使用C++命名空间时,您更喜欢显式命名它们,如下所示:

std::cout << "Hello, world!\n";
Run Code Online (Sandbox Code Playgroud)

或者您更喜欢using namespace:

using namespace std;
cout << "Hello, world!\n";
Run Code Online (Sandbox Code Playgroud)

如果您更喜欢后者,您是否在文件或功能范围内声明您的使用?

我个人更喜欢明确地命名它们 - 它更多的是打字,但是当使用命名空间的混合(例如stdboost)时,我发现它更具可读性.

c++ namespaces using

17
推荐指数
3
解决办法
3247
查看次数

Visual C++ 2008"发布"版本包含调试信息

我注意到在使用MS Visual Studio 2008生成新的C++项目时,Release版本包含调试符号 - 特别是启用了以下设置:

  • C++/General/Debug信息格式设置为Program Database.
  • 链接器/调试/生成调试信息设置设置为.

我在Visual Studio的早期版本中从未注意到这一点.

因此,除了生成更大的EXE文件之外,启用这些设置是否有任何缺点?

c++ debugging visual-studio

17
推荐指数
1
解决办法
1万
查看次数

用于pImpl成语的std :: auto_ptr或boost :: shared_ptr?

当使用pImpl习语时,最好使用a boost:shared_ptr而不是std::auto_ptr?我确定我曾经读过增强版更加异常友好吗?

class Foo
{
public:
    Foo();
private:
    struct impl;
    std::auto_ptr<impl> impl_;
};

class Foo
{
public:
    Foo();
private:
    struct impl;
    boost::shared_ptr<impl> impl_;
};
Run Code Online (Sandbox Code Playgroud)

[编辑]使用std :: auto_ptr <>是否总是安全的,或者是否需要使用替代的boost智能指针?

c++ boost stl auto-ptr shared-ptr

16
推荐指数
2
解决办法
9683
查看次数

将类型添加到std命名空间

std命名空间添加类型是否可以接受.例如,我想要一个TCHAR友好的字符串,以下是可接受的吗?

#include <string>

namespace std
{
    typedef basic_string<TCHAR> tstring;
}
Run Code Online (Sandbox Code Playgroud)

或者我应该使用自己的命名空间?

c++ stl namespaces

16
推荐指数
3
解决办法
4272
查看次数

虚拟Qt信号?

在回顾一些Qt C++代码时,我遇到了这个问题:

class Foo
{
  Q_OBJECT

signals:
  virtual void someSignal(const QString& str, int n)
  {
    Q_UNUSED(str);
    Q_UNUSED(n);
  }
  ...
};
Run Code Online (Sandbox Code Playgroud)

现在,Qt信号不能有一个身体所以我很惊讶这甚至编译(也许是因为身体实际上是空的).我也没有看到将信号虚拟为......它不能有一个身体所以它怎么能被覆盖?

我在这里遗漏了什么,或者这是一个有效的代码味道?

c++ qt

16
推荐指数
1
解决办法
1万
查看次数

检查subversion更新

我正在组建一个构建系统,并想知道是否有一种可靠的方法来确定签出的SVN文件夹是否需要更新(即它是否与存储库不同步).除非发生变化,否则我想避免夜间建造.我可以编写一个脚本来解析svn update我猜的命令结果,但我想知道是否有一个命令可以告诉我实际上是否需要更新?

svn

11
推荐指数
2
解决办法
9574
查看次数

QMake'子目标'模板 - 执行目标?

我正在使用一个使用'subdirs'模板的qmake .pro文件为我的Qt应用程序组建一个构建系统.这工作正常,并允许我指定每个目标的构建顺序,因此依赖关系很好地工作.不过,我现在已经添加了一个工具来生成一个版本号(包含它的制作日期,SVN版本等)所使用的主要的应用程序的项目 - 我可以先建这个版本的工具,但是当它是建立在我想在构建任何更多目标之前执行它(它生成一个包含主应用程序包含的版本号的头文件.)

例如,我的简单qmake文件看起来像这样:

TEMPLATE = subdirs
CONFIG += ordered
SUBDIRS = version \
          lib \
          tests \
          mainapp
Run Code Online (Sandbox Code Playgroud)

当'version'构建时,我想在构建'lib'之前执行它(在命令行上传递一些参数).

有谁知道这是否可能?我看到qmake有一个可以执行应用程序的"系统"命令,但我不知道如何利用它.

一个相关的问题涉及我的单元测试.它们存在于'test'项目中并使用QTest框架.我想在构建'mainapp'之前执行测试exe,如果测试失败(即测试exe没有返回零),我想退出构建过程.

我意识到qmake是为了生成makefile而设计的,所以我可能希望这里有点太多但是如果有人能给我一些指示,那将非常受欢迎.

c++ qt qmake

11
推荐指数
2
解决办法
8394
查看次数

MSVC依赖关系与参考文献

我一直使用Visual Studio Dependencies选项来确保,例如,在构建我的C++项目时,还构建了任何依赖的LIB或DLL项目.然而,我一直听到人们提到'参考'并且想知道,随着VS 2010即将来临,我应该改变我的做法.

使用对依赖项的引用是否有任何好处,或者前者只是.NET功能?我目前正在使用VS2008.

c++ visual-c++

11
推荐指数
1
解决办法
2907
查看次数

在启动时关闭QMainWindow?

我有一个Qt应用程序,它使用一个QMainWindow主要UI 的派生类.在启动时,我想进行一些安全检查,如果失败,则向用户显示一条消息并关闭主窗口.目前我在QMainWindow构造函数中进行了这些检查,但是如果我调用该close方法,则没有任何反应,应用程序继续运行.例如:

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
    setupUi(this);
    ...
    if (checkFails())
    {
        QMessageBox::warning(this, tr("Error"), tr("You cannot run this app"));
        // This has no effect
        close();
    }
}
Run Code Online (Sandbox Code Playgroud)

或者,我可以在main函数中进行检查,但后来我失去了显示特定于语言的消息框的能力(tr宏只能在QObject事物的外观中起作用.)

有关如何在启动时关闭主窗口或使tr宏在QObject派生类之外工作的任何想法?

c++ qt

11
推荐指数
1
解决办法
5125
查看次数

标签 统计

c++ ×9

qt ×3

namespaces ×2

stl ×2

auto-ptr ×1

boost ×1

debugging ×1

qmake ×1

shared-ptr ×1

svn ×1

using ×1

visual-c++ ×1

visual-studio ×1