我在read access violation exception
类析构函数中得到Base
,因为root_dse
在CoUninitialize();
之后超出范围
#include <atlbase.h>
#include <ActiveDS.h>
#include <memory>
#pragma comment(lib, "activeds.lib")
#pragma comment(lib, "adsiid.lib")
using namespace std;
class Base {
protected:
CComPtr<IADs> root_dse = nullptr;
public:
Base()
{
CoInitialize(nullptr);
}
virtual ~Base()
{
CoUninitialize();
}
virtual void do_stuff() = 0;
};
class Derived : public Base {
private:
void do_stuff() override {
const auto h_result = ADsOpenObject(L"LDAP://rootDSE",
NULL,
NULL,
ADS_SECURE_AUTHENTICATION,
IID_IADs,
(void**)&root_dse);
}
};
int main() {
std::shared_ptr<Base> base = std::make_shared<Derived>();
base->do_stuff();
return 0;
}
如何确保root_dse
之前的release
是CoUninitialize();
以避免read access violation exception
?
注意:所有派生类都使用root_dse
,因此它应该在Base
类中。