explicit-destructor-call相关内容
我偶然发现了以下代码片段: #include #include 使用命名空间标准;第一课{字符串 *s;民众:First() { s = new string("Text");}~First() { 删除 s;}void Print(){ cout 文字说这个片段应该导致运行时错误.现在,我不太确定,所以我尝试编译并运行它.有效.奇怪的是,尽管所涉及的数据很简单,但程序在打印“文本"后卡顿,仅
..
我刚刚写了以下程序&它会编译&运行良好.(请参见此处的实时演示.) #includetypedef int T;int main(){int a = 3;std :: cout
..
在下面的C ++代码中,允许我显式调用析构函数,但不能显式调用构造函数.这是为什么?不会在dtor案件中明确要求更富有表现力和统一吗? class X {};int main(){X * x =(X *):: operator new(sizeof(X));新的(x)X;//选项#1:确定x-> X();//选项#2:错误x->〜X();:: operator delete(x);} 解决
..
以下类别是否违反严格的别名规则: template class store { char m_data[sizeof(T)]; bool m_init; public: store() : m_init(false) {} store(const T &t) : init(true) { new(m_data) T(t)
..
在C ++编程语言第4版中,有一个矢量实现的示例,请参阅消息末尾的相关代码. uninitialized_move()通过将新的T对象从旧存储区中移出,将它们初始化到新的存储区中.然后,它将调用原始T对象(从其移出的对象)上的析构函数.为什么在这种情况下需要进行析构函数调用? 这是我的不完整理解:移动对象意味着将移出的对象拥有的资源的所有权转移到移入的对象.移出对象中的其余部分是某些内
..
我知道由于双重析构函数的调用,显式调用析构函数会导致未定义的行为,例如: #include int main() { std::vector foo(10); foo.~vector(); return 0; // Oops, destructor will be called again on return, double-free.
..
我知道我可以声明一个析构函数 = delete 或 private ,以防止程序隐式删除对象在作用域的末尾。我也知道,如果它是私有的,我可以有一个成员函数,可以显式调用析构函数每当我调用它: void kill(){this->〜A(); } p>为什么我想要防止隐式破坏?请举个例子 = delete 会做什么?它确保析构函数永远不会运行吗?因此,对象将永远存在于其范围之外? 解
..
这里的“简单”,我的意思是一个非虚拟空析构函数或POD类型的类。 典型示例: char buffer [SIZE]; T * p = new(buffer)T; ... p->〜T(); //?我不认为它是未定义的行为或内存泄漏。 重用缓冲区有什么问题吗? 解决方案
..
我有这个代码: struct data { void doNothing(){} } ; int main(){ data * ptr = new data(); ptr->〜data(); ptr-> doNothing(); :: operator delete(ptr); } 注意 doNothing()在对象被销毁之后但在其内存被释放之
..
请考虑此代码(对于 renew 和 cleanse 的不同值): struct T { int mem; T(){} 〜T(){mem = 42; } }; //身份函数, //但断开输入和输出之间的任何连接 int& cleanse_ref(int& r){ int * volatile pv =& r; //也可以使用cin / cout这里 return *
..