c++ DISALLOW_COPY_AND_ASSIGN
c++ DISALLOW_COPY_AND_ASSIGN - youxin - 博客园 (cnblogs.com)
在使用CMake和VS Code时,要使源文件跳转正常工作,需要进行一些配置。下面是一些可能的解决方案:
1. 安装CMake Tools扩展:在VS Code中安装"CMake Tools"扩展,该扩展提供了与CMake集成的功能,并可帮助自动配置构建和调试环境。
2. 配置CMake Tools:打开VS Code的设置(File -> Preferences -> Settings)并搜索"CMake Tools",然后根据需要进行相关配置。确保设置中的"CMake: Source Directory"和"CMake: Build Directory"与你的项目目录和构建目录相对应。
3. 生成编译数据库:在CMake配置中将`set(CMAKE_EXPORT_COMPILE_COMMANDS ON)`添加到你的CMakeLists.txt文件中。然后重新生成你的项目,这将生成一个名为"compile_commands.json"的文件,其中包含编译器所使用的编译命令。
4. 配置C/C++扩展:安装"C/C++"扩展,并在VS Code的设置中搜索"C/C++"以获取相关配置。确保设置中的"Cpp: Configuration Provider"选择了"CMake",这将通知C/C++扩展使用CMake构建系统。
5. 刷新C++ Intellisense:在VS Code的命令面板中(Ctrl+Shift+P),搜索"C/C++: Reset IntelliSense Database"并运行该命令,然后重新启动VS Code。
这些步骤应该能够帮助你在VS Code中实现源文件的跳转。请注意,具体的配置可能因你的项目结构和使用的扩展版本而有所不同。如果问题仍然存在,请确保你的
Vscode+clangd+lldb+cmake
几乎无痛的VSCode+clangd+lldb+cmake配置C/C++开发环境指南 - 知乎 (zhihu.com)
VS Code 安装 VSIX 插件_.vsix-CSDN博客
Releases · vadimcn/codelldb (githubfast.com)
关于debug
这个dmo1就是你的项目名,这里我的项目名和文件夹名不同,所以直接写名字
一般情况下
${workspaceFolderBasename}
永久增加交换空间
要在Ubuntu 22.04 上永久增加交换空间,可以按照以下步骤进行操作:
1. 创建交换文件:首先,使用以下命令创建一个交换文件。请将 <swapfile_path>
替换为你想要创建的交换文件的路径,以及 <swapfile_size>
替换为你想要的交换文件的大小(单位为MB)。
````bash
sudo fallocate -l <swapfile_size>MB <swapfile_path>
```
例如,创建一个大小为4GB的交换文件可以使用以下命令:
````bash
sudo fallocate -l 4GB /swapfile
```
2. 设置文件权限:运行以下命令,将文件的权限设置为只有 root 用户可以读写:
````bash
sudo chmod 600 <swapfile_path>
```
例如:
````bash
sudo chmod 600 /swapfile
```
3. 启用交换文件:使用以下命令将交换文件标记为交换空间:
````bash
sudo mkswap <swapfile_path>
```
例如:
````bash
sudo mkswap /swapfile
```
4. 激活交换空间:运行以下命令来启用交换空间:
````bash
sudo swapon <swapfile_path>
```
例如:
````bash
sudo swapon /swapfile
```
5. 设置永久交换空间:打开 /etc/fstab
文件以编辑:
````bash
sudo nano /etc/fstab
```
在文件的末尾添加以下一行来将交换文件自动加载为永久交换空间:
````
<swapfile_path> none swap sw 0 0
```
例如:
````
/swapfile none swap sw 0 0
```
6. 保存并关闭文件:按下 Ctrl + X
,然后按 Y
保存更改。
7. 完成:现在你已经在 Ubuntu 22.04 上成功增加了永久交换空间。可以使用 swapon --show
命令来验证交换空间是否正确启用。
请注意,增加交换空间可能会对系统性能产生一定影响,因为交换空间是在磁盘上进行读写操作的。因此,在决定增加交换空间时,请考虑你的系统硬件配置和内存需求。
默认构造函数、默认拷贝函数、默认赋值函数、析构函数
C++随笔:关键字 =default 和 =delete - 知乎 (zhihu.com)
delete 某指针后,为什么要设置该指针nullptr?
void Server::deleteConnection(Socket *sock){
auto it=connections.find(sock->getFd());
if (it!=connections.end()) {
Connection *conn=connections[sock->getFd()];
connections.erase(sock->getFd());
delete conn;
}
}
在这段代码中,`conn` 是通过 new
关键字动态分配的 Connection
对象的指针。在删除 conn
对象后,将 conn
设置为 nullptr
是为了避免出现悬挂指针(dangling pointer)的情况。
当 conn
被删除后,指向该对象的指针就成为无效指针,即悬挂指针。如果后续代码继续使用这个指针,就会导致未定义的行为。为了避免这种情况,将指针设置为 nullptr
是一种良好的实践,可以帮助我们在后续代码中检测和处理悬挂指针的情况。
通过将 conn
设置为 nullptr
,可以在后续代码中检查指针是否为 nullptr
,以避免访问已被删除的对象。这样可以提高代码的健壮性和可维护性。
虽然在这段特定的代码中,将 conn
设置为 nullptr
可以省略,因为 conn
是一个局部变量,其作用域在函数结束后就会结束,不会再被使用。但是为了养成良好的编程习惯,以及防止以后对代码的修改可能导致问题,将指针设置为 nullptr
是一个好的实践。这样可以确保在后续的代码中,显式地知道该指针已经无效,避免不必要的错误和问题。