On Apr 16, 5:43 pm, mpho <tjab...@[EMAIL PROTECTED]
> wrote:
> X(int s, T *p) : sz(s), ptr(new T[s])
> {
> assert(ptr != NULL);
> for (int i = 0, i < sz; i++)
> ptr[i] = p[i];
> }
Your assertion can never fail, since "new" throws a std::bad_alloc
when it fails. Therefore, the assertion is misleading and should
probably be removed.
> //other members
> ~X() { delete ptr; ptr = NULL; }
> };
Whoops! Your destructor must perform the array form of deletion:
delete [] ptr;
There is no need to set ptr to NULL afterwords, since as soon as we
exit the destructor, the object containing ptr no longer exists, and
its members can never be accessed again.
> int main(){
>
> ar[10] = {ten values};
> Y yobj(10, ar); //problem here(?)
> ......
> .....
>
> }
>
> What's the problem above?
1) ar has no type
2) "ten values" is pseudocode
3) Any uncaught exception (that can unwind the stack past main) will
cause std::terminate() to be called. Since there are no try/catch
blocks in your program, and you say an exception is occurring, it
should be of little surprise that your program terminates.
--
Chris
[ See http://www.gotw.ca/resources/clcm.htm
for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]


|