我的课程L
简化如下:
class L
{
private:
C * _pc ;
public:
C * getc() const ; // getter
void setc(const C * ipc); //setter
~L()
{
delete _pc ;
}
};
其中C
是另一个类。
我还有一个简化如下的辅助类CHelper
:
class CHelper
{
C _c ;
CHelper(L & ic)
{
// 1st constructs _c (code omitted);
// then sets ic's _pc pointer member variable :
ic.setc(&_c);
}
};
我觉得在不确定的情况下以某种方式删除_pc
会有问题。怎么样?
这种approch的缺点是什么?我怎样才能达到相同的功能" (使用正确的方法正确设置指针成员变量?
答案 0 :(得分:0)
您的代码目前尚未编译。
C
的构造函数要求C
个对象。 setc
类(可能)没有CHelper(L& ic)
方法。你可能意味着CHelper
。
无论如何,如果你的_c
对象超出范围并被销毁,那么成员变量L
将随之被销毁。在你的L
对象中留下一个悬空指针。不仅如此,_pc
目前也违反了三/五的规则。
如果您有权访问C ++ 11,我建议如果需要_c
类,则用std::shared_ptr
替换原始指针CHelper
和delete
(从而删除该析构函数中的std::unique_ptr
,否则删除select coalesce(A.DID_CENT,B.DID_CENT,C.DID_CENT) DID_CENT,
nvl(sum(A.cnt),0) A, nvl(sum(B.cnt),0) B, nvl(sum(C.cnt),0) C
from
(
SELECT DID_CENT, COUNT (*) cnt
from TXN_TOTO
WHERE (CO1 = '1L' OR CO1 = '1') AND OP1 in('P3', 'R1')
GROUP BY DID_CENT
) A
FULL JOIN
(
SELECT DID_CENT, COUNT (*) cnt
from TXN_TITI
WHERE (CO1 = '1L' OR CO1 = '1') AND OP1 in('P3', 'R1') AND STAT = 6
GROUP BY DID_CENT
) B ON A.DID_CENT=B.DID_CENT
FULL JOIN
(
SELECT DID_CENT, COUNT (*) cnt
from TXN_TITI tti inner join TXN_TATA ttdi
ON tti.ID_DINT = ttdi.ID_DINT
WHERE (CO1 = '1L' AND OP1 in('01', '04', 'Z8')) OR (CO1 = '1' AND OP1 in('P3', 'R1'))
GROUP BY DID_CENT
) C ON B.DID_CENT=C.DID_CENT
GROUP BY coalesce(A.DID_CENT,B.DID_CENT,C.DID_CENT)
。
答案 1 :(得分:-3)
检查ipc参数是否像数组一样分配,因为必须对数组使用delete [] _pc。