这应该以RAII方式获取Linux上的当前工作目录:
#include <iostream>
#include <memory>
#include <unistd.h>
#include <cstdlib>
int main() {
using namespace std;
ios_base::sync_with_stdio(false);
//unique_ptr<const char> cwd (get_current_dir_name());
//unique_ptr<const char, [](const char* ptr){ free(ptr) }> cwd (get_current_dir_name());
unique_ptr<const char> cwd (get_current_dir_name());
cout<<cwd.get()<<'\n';
return 0;
}
它不应该使用默认删除器,因为get_current_dir_name()
会返回malloc
内存,而应该是free
d而不是delete
d。
如何让自定义删除工具正常工作?
注释掉的行是我无法编译的失败尝试
在gcc 4.9.2(-std=c++14
)。