在Vim中,我经常发现自己处于一种情况,我想在一个单独的缓冲区中完成我正在编辑的文件的文件名.
假设我打开了两个缓冲区:foo.cpp和bar.h. 在foo.cpp中我需要#include"bar.h".我想做这样的事情:
Foo.cpp中
#include "b<complete filename to bar.h>
Run Code Online (Sandbox Code Playgroud)
根据Vim文档,我能够使用CTRL + x CTRL + f来完成文件名,但这似乎依赖于Vim具有与bar.h的父目录相当的CWD.这并不总是可行的.
鉴于我在单独的缓冲区中打开了bar.h,是否可以根据缓冲区名称自动完成?
scons中的许多内置构建器都有$*COMSTR变量,用于更改其关联的构建器的默认输出.我们可以使用$*COMSTR变量来选择性地使我们的构建过程更加清晰.
我想为命令构建器设置$*COMSTR变量.
target = 'mydb.db3'
populatesql = 'populate.sql'
sources = [populatesql]
command = '@sqlite3 $TARGET < ' + populatesql
built_database = env.Command(target, sources, command)
Run Code Online (Sandbox Code Playgroud)
我发现我可以在命令前加上'@'字符来抑制输出,但我一直无法发现如何在命令构建器中使用$*COMSTR.我在这里错过了一招吗?
谢谢.
请考虑以下示例:
#include <vector>
class Foo {
std::vector<int*> v;
public:
Foo() {
this->v.push_back(new int(23));
this->v.push_back(new int(24));
this->v.push_back(new int(25));
}
~Foo() {
}
};
int main() {
Foo f;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当f超出main()中的范围时,会调用f的析构函数,它应该间接释放fv.根据这个,现在应该调用向量v的每个元素的析构函数.
但是,当我在valgrind中运行这个程序时,我发现int*没有被释放.
$ valgrind --leak-check=full ./a.out
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?