使用标准库的智能指针* 注意在使用数组的时候需要使用数组的特化版本。#include iostream #include memory std::unique_ptrchar[] division(int x, int y) { std::unique_ptrchar[] sp(new char[100]{}); if (y 0) { throw Please do not use 0 as a divisor; } std::sprintf(sp.get(), %d / %d %d\n, x, y, x / y); return sp; } int main() { try { std::unique_ptrchar[] sp division(6, 0); std::cout sp.get() std::endl; } catch (const char* e) { std::cerr e std::endl; } }互斥锁的释放在多线程编程中为了保护共享资源我们通常会使用 互斥量 mutex 来进行保护。并且在使用资源前进行上锁的 lock() 操作在使用完毕后用 unlock() 进行解锁。直接使用互斥量这里假定在 2000ms 后两个线程都会结束。#include iostream #include thread #include mutex int x 0; std::mutex mutex; void fun() { for (int i 0; i 100000; i 1) { mutex.lock(); x 1; mutex.unlock(); } } int main() { std::thread th1(fun); std::thread th2(fun); th1.join(); th2.join(); std::cout x std::endl; }但是这种写法需要开始和结束处都对 mutex 整个对象进行操作。此处代码较短不容易出错但是当代码量越来越大各种情况越来越复杂后就很容易遗漏最后的 mutex.unlock(); 解锁操作。此时就可以使用 RAII 的方式在构造的时候对 mutex 进行 lock() 操作在 unlock() 进行解锁操作。