Vị trí deallocation function không được gọi là


0 Phiếu
Đã hỏi 25/5/2016 bởi tebHass (520 điểm)
code sau đây tôi viết phải gọi cả hai vị trí deallocation và phân bổ các chức năng.
#include <iostream>
using namespace std;
struct A
{
    void * operator new [] (size_t t, int, int)
    {
        cout << "3 parameters allocation" << endl;
        return ::operator new[](t);
    }
    void operator delete [] (void *p, int, int)
    {
        cout << "3 parameters deallocation" << endl;
        return ::operator delete[](p);
    }
};
int main() 
{
    A *a = new (5,5) A[10]; //operator new [] (size_t, int, int) invoked
    delete [] a; //Error. Overload resolution is failed.
}
demo 5.3.4/22 nói N3797:
A tuyên bố của một vị trí deallocation function phù hợp với tuyên bố của một function phân bổ vị trí nếu nó có cùng một số tham số, và sau khi biến đổi tham số (8.3.5), tất cả các tham số loại trừ là người đầu tiên là giống hệt nhau. Nếu việc tra cứu tìm thấy một chức năng duy nhất phù hợp với deallocation, function đó sẽ được gọi là; Nếu không, không có function deallocation sẽ được gọi là. b 534 09e20d3d7949f6a79f39e3d3cf59 đó là không thực hiện trong C++11 hoặc nó là sự hiểu lầm của tôi?

2 Câu trả lời

0 Phiếu
Đã trả lời 04/6/2016 bởi fge_How (110 điểm) 1 Phản ánh
A *a = new(5, 5) A[10]; 
A::operator delete[](a,5,5);
trên Visual C ++ 2013 đây công trình lớn
Đã bình luận 06/6/2016 bởi vs_are (120 điểm)
Liên quan: http://stackoverflow.com/a/ 14119344
0 Phiếu
Đã trả lời 04/6/2016 bởi Change (140 điểm)
A *a = new(5, 5) A[10]; 
A::operator delete[](a,5,5);
trên Visual C ++ 2013 đây công trình lớn
Đã bình luận 04/6/2016 bởi Jnf_5869 (710 điểm) 1 Phản ánh
Tôi nghĩ rằng function deallocation vị trí chỉ được gọi là khi không có một exception trong việc xây dựng các đối tượng? [Sống ví dụ] (http://ideone.com/ qcM8qj)

ToughDev Q&A là gì?

Trang web hỏi đáp cho các bạn đam mê lập trình, phát triển phần mềm và các vấn đề kỹ thuật khác. Với sự giúp đỡ của bạn, chúng tôi hy vọng sẽ xây dựng thành công một thư viện đầy đủ các câu hỏi và trả lời về tất cả các vấn đề có liên quan đến lập trình!







...